C# DI:将实体与存储库关联
我对这个概念很陌生。我要做的是创建一个工厂,它将返回一个用于存储库函数的对象。没问题。因此,我在main()中创建了一个具体工厂的实例,并将其存储在App的静态属性中,但我的实体位于单独的dll中。将存储库传递给构造函数中的每个实体类有意义吗?这感觉不对。我的问题是:如何最好地让我的实体知道他们应该使用哪个存储库 我的应用程序部分类看起来像C# DI:将实体与存储库关联,c#,architecture,dependency-injection,C#,Architecture,Dependency Injection,我对这个概念很陌生。我要做的是创建一个工厂,它将返回一个用于存储库函数的对象。没问题。因此,我在main()中创建了一个具体工厂的实例,并将其存储在App的静态属性中,但我的实体位于单独的dll中。将存储库传递给构造函数中的每个实体类有意义吗?这感觉不对。我的问题是:如何最好地让我的实体知道他们应该使用哪个存储库 我的应用程序部分类看起来像 public partial class App : Application { private static ICalDataAccess _daqFa
public partial class App : Application
{
private static ICalDataAccess _daqFactory;
public static ICalDataAccess DataAccessFactory
{
set { _daqFactory = value; }
get { return _daqFactory; }
}
}
也许需要更多的代码
public class Widget
{
public string Description { get; set; }
public int ID { get; set; }
private IWidgetRepository _widgetRepository;
public Widget(IWidgetRepository WidgetRepository)
{
_widgetRepository = WidgetRepository;
}
public void Save()
{
_widgetRepository.Save(this);
}
}
我在这里做了什么异常的事情吗?我认为一般的建议是让您的实体免于持久性问题。也就是说,您有一些代码检索实体并使用它们执行任何需要完成的工作,从而生成新的、删除的或修改的实体,然后调用代码将这些实体提交到相应的存储库(或者如果您有跟踪或检测修改的实体的内容,如EF或NHibernate,则请求保存) 这样,您的实体根本不需要了解存储库 我通常创建一个UnitOfWork助手类,它通过“public RepositoryFactory repositories{get;}”属性公开我的所有存储库,这样,只要提供UnitOfWork类的一个实例,我就可以访问我的所有数据源。然后,可以通过IoC将UnitOfWork注入任何需要数据访问的类 有关此主题的一些推荐阅读: