Мы собираемся быть использованием пользовательского ролевого поставщика с WCF. Переопределенный метод GetRolesForUser потребует использования уже существующего RoleRepository.
Теперь, с заурядным классом, мы создали бы его использование, StructureMap и зависимость RoleRepository будут введены через конструктора.
Однако это - WCF, который делает построение из пользовательский ролевой класс поставщика, и это 'сделано' declaritavely через атрибут roleManager в web.config.
Я действительно не хочу соединять RoleRepository depndency проводами в пользовательскую роль probvider класс, но похоже, что я буду иметь к.
Какие-либо идеи?
Простые намазанные / конденсированные ORM-отображение с использованием Linq
Рассмотрим эту таблицу:
[MessageId] INT,
[MessageText] NVARCHAR(MAX)
[MessageDate] DATETIME
... и эта структура:
struct Message
{
Int32 Id;
String Text;
DateTime Date;
}
вместо того, чтобы делать что-то вдоль линий:
List<Message> messages = new List<Message>();
foreach (row in DataTable.Rows)
{
var message = new Message
{
Id = Convert.ToInt32(row["MessageId"]),
Text = Convert.ToString(row["MessageText"]),
Date = Convert.ToDateTime(row["MessageDate"])
};
messages.Add(message);
}
можно использовать LINQ и делать то же самое с меньшим количеством строк кода, и на мой взгляд; Больше стиля. Вроде так:
var messages = DataTable.AsEnumerable().Select(r => new Message
{
Id = Convert.ToInt32(r["MessageId"]),
Text = Convert.ToString(r["MessageText"]),
Date = Convert.ToDateTime(r["MessageDate"])
}).ToList();
Этот подход может быть вложенным, как и петли могут.
-121--1749590-Ролевые и родственные типы являются наследие ASP.NET, которые печально известны для не дружественных. Они требуют конструктора по умолчанию, и нет никаких крючков, предлагаемых для их инициализации. Это отстой, но это так, как оно есть.
В таких ситуациях лучшее лекарственное средство - реализовать рольПровидер в качестве скромного объекта . Другими словами, рольProvider должен проводить все зависимости, но оттуда он делегает все реализацию на ваш собственный открытый и расширяемый API.