Есть ли способ предоставить собственную фабрику для создания сущностей .Net Framework из EF4? - PullRequest
1 голос
/ 11 мая 2010

Существует множество постов о том, какие классные объекты POCO и как их поддерживает Entity Framework 4. Я решил опробовать его на доменной архитектуре, ориентированной на разработку, и закончил с предметными сущностями домена, которые зависят от сервисов. Все идет нормально. Представьте, что мои продукты являются объектами POCO. Когда я запрашиваю объекты вроде этого:

NorthwindContext db = new NorthwindContext();
var products = db.Products.ToList();

EF создает экземпляры продуктов для меня.

Теперь я хочу внедрить зависимости в мои объекты POCO (продукты). Единственный способ, который я вижу, это создать какой-то метод в NorthwindContext, который создает что-то вроде псевдокода ниже:

public List<Product> GetProducts(){
    var products = database.Products.ToList();
    container.BuildUp(products); //inject dependencies
    return products;
}

Но что, если я хочу сделать свой репозиторий более гибким, как это:

public ObjectSet<Product> GetProducts() { ... }

Итак, мне действительно нужен завод, чтобы сделать его более ленивым и дружелюбным по отношению к linq. Пожалуйста, помогите!

Ответы [ 2 ]

3 голосов
/ 11 мая 2010

Вы ищете ключевое слово yield ?

public IEnumerable<Product> GetProducts()
{
    foreach(var product in database.Products)
    {
        yield return container.BuildUp(product);
    }
}

- 2-я попытка:

public IEnumerable<Product> BuildUp(this IEnumerable<Product> source)
{
    foreach(var product in source)
    {
        yield return container.BuildUp(product);
    }
}

Использование:

database.Products.Where(p => blah).BuildUp();
0 голосов
/ 11 мая 2010

Ответ таков: вам не следует внедрять сервисы в свои организации.Причину этого ответа можно найти в блоге Джимми Богарда , а также в моем собственном .

Существует много проблем, в том числе:

  • путаница в том, какие методы используют внедренную зависимость
  • различные жизненные циклы объектов и служб
  • трудности втестирование
...