我目前正在使用 EF 和存储库模式开发 MVC 3 应用程序。我创建了一个通用接口(interface),如下所示:
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 中,我像这样注册接口(interface)和类:
container.RegisterType<ICardRepository, CardRepository>();
现在的问题是:我可以使用 IGenericRepository 而不是 ICardRepository
吗?
像这样:
container.RegisterType<IGenericRepository<Card>, CardRepository>();
理论上我可以,但由于我仍然不明白这种模式是如何工作的,所以我不太确定我是否没有破坏或遗漏某些东西。
最佳答案
一个可能的问题是现在您必须解决 IGenericRepository<Card>
, 而不是 ICardRepository
.
这行不通:
var cardRepository = container.Resolve<ICardRepository>();
相反,您必须这样做:
var cardRepository = container.Resolve<IGenericRepository<Card>>();
这也意味着如果你正在做类似构造函数注入(inject)的事情,你不能使用:
public class SomethingDependentOnCardRepository
{
// The parameter type should be IGenericRepository<Card> instead,
// if you are using Unity to resolve this dependency.
public SomethingDependentOnCardRepository(ICardRepository cardRepository)
{
// code
}
}
关于c# - 在存储库模式中使用通用接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9141796/