在我的解决方案的项目设置是这样的:与注射的DbContext到库类库
- App.Data
- App.Models
- App.Web
在应用程序。数据,我使用实体框架来访问我的数据与一堆存储库来抽象与它的交互。出于显而易见的原因,我希望我的App.Web仅引用App.Data项目,而不是实体框架。
我使用构造器注入给我的控制器到存储库容器,看起来像这样的引用:
public interface IDataRepository
{
IUserRepository User { get; set; }
IProductRepository Product { get; set; }
// ...
}
public class DataRepository : IDataRepository
{
private readonly AppContext _context;
public DataRepository(AppContext context)
{
_context = context;
}
// ...
}
DataRepository
将有AppContext
对象(从实体框架的DbContext
继承),所有的孩子存储库将用于访问数据库。
因此,最后我们来到我的问题:考虑到它是一个代码库并没有入口点,我该如何在DataRepository
上使用构造函数注入?我无法在App.Web中引导AppContext
,因为那时我必须从该项目中引用实体框架。
或者我只是在做一些愚蠢的事情?
不回答你的问题,但是,而不是定义了大量的资料库界面,尝试制定一个统一'IRepository'接口,解释[这里](HTTP:/ /www.cuttingedge.it/blogs/steven/pivot/entry.php?id=92)。这允许更多的灵活性。 –
Steven
2013-05-10 08:48:56
@Steven感谢您的评论。由于这个原因,我更喜欢特定的存储库:“存储库是被建模的域的一部分,并且该域不是通用的。不是每个实体都可以被删除,不是每个实体都可以被添加,并不是每个实体都有一个存储库。 http://stackoverflow.com/questions/1230571/advantage-of-creating-a-generic-repository-vs-specific-repository-for-each-obje – ajbeaven 2013-05-10 08:53:24