在存储库模式中使用通用接口
我目前正在使用 EF 和存储库模式开发 MVC 3 应用程序。我创建了一个通用接口,如下所示:
interface IGenericRepository<T>
{
}
和一个抽象类,如下所示:
abstract class GenericRepository<TContext ,T> : IGenericRepository<T>
where TContext : DbContext, new()
{
}
之后,我的存储库继承了它们,如下所示:
interface ICardRepository : IGenericRepository<Card>
{
}
使用
class CardRepository : GenericRepository<EfContext, Card>,
ICardRepository
{
}
Unity,我注册了接口和类,如下所示:
container.RegisterType<ICardRepository, CardRepository>();
现在的问题是:我可以使用 IGenericRepository 而不是ICardRepository
? 像这样:
container.RegisterType<IGenericRepository<Card>, CardRepository>();
理论上我可以,但由于我仍然不明白这种模式是如何工作的,我不太确定我是否没有破坏或丢失某些东西。
I am currently developing an MVC 3 application with EF and the Repository pattern. I created a generic interface as follows:
interface IGenericRepository<T>
{
}
And an abstract class as follows:
abstract class GenericRepository<TContext ,T> : IGenericRepository<T>
where TContext : DbContext, new()
{
}
After that my repo inherits both of them like this:
interface ICardRepository : IGenericRepository<Card>
{
}
and
class CardRepository : GenericRepository<EfContext, Card>,
ICardRepository
{
}
With Unity I register the interface and the class like this:
container.RegisterType<ICardRepository, CardRepository>();
Now the question is: can I use IGenericRepository instead of ICardRepository
?
Like this:
container.RegisterType<IGenericRepository<Card>, CardRepository>();
In theory I can, but as I still do not get how this pattern works I am not quite sure if I am not breaking or missing something.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
一个可能的问题是,现在您必须解析
IGenericRepository
,而不是ICardRepository
。这是行不通的:
相反,你必须这样做:
这也意味着,如果你正在做构造函数注入之类的事情,你不能使用:
One possible issue is now you will have to resolve
IGenericRepository<Card>
, instead ofICardRepository
.This will not work:
Instead you will have to do this:
This also means that if you are doing something like constructor injection, you can't use: