Sła*_*iek 4 c# domain-driven-design factory repository
嗨,我正在尝试按照DDD进行应用.我有以下实体:
public class Item
{
public Category Category { get; protected set; }
...
}
public class SpecificItem : Item
{
...
}
public class Category
{
public static int IdOfCategoryForSpecificItem = 10;
public int Id { get; set; }
}
现在我想用创建ObjectItem类型对象的方法创建工厂.但是这个特定项目必须属于特定类别.所以我创建了这样的工厂:
public class ItemFactory
{
public static SpecificItem CreateSpecificItem(object someArguments)
{
IRepository<Category> repository = null // How to get repository?
return new SpecificItem
{
Category = repository.FirstOrDefault(i => i.Id == Category.IdOfCategoryForSpecificItem),
// additional initialization
};
}
}
现在我的问题是:
Ste*_*ven 10
重写你ItemFactory的使用依赖注入并注入IRepository<Category>使用构造函数注入.完成后,ItemFactory将看起来像这样:
public class ItemFactory
{
private readonly IRepository<Category> repository;
public ItemFactory(IRepository<Category> repository)
{
this.repository = repository;
}
public SpecificItem CreateSpecificItem(object someArguments)
{
return new SpecificItem
{
Category = this.repository.FirstOrDefault(i =>
i.Id == Category.IdOfCategoryForSpecificItem),
// additional initialization
};
}
}
Run Code Online (Sandbox Code Playgroud)
这样您就可以将检索实现的责任转移IRepository<Category>给调用者.现在,您可以对需要的所有类型执行相同操作ItemFactory.ItemFactory在这些类型的构造函数中注入as依赖项.这样做一直到应用程序的类型层次结构的顶部,并组成他们的类型(组合根).
特别是IoC/DI框架将非常方便为您自动创建类型.