我目前正在使用EF和Repository模式开发MVC 3应用程序。我创建了一个通用接口,如下所示:
interface IGenericRepository<T>
{
}
一个抽象类如下:
abstract class GenericRepository<TContext ,T> : IGenericRepository<T>
where TContext : DbContext, new()
{
}
之后我的repo继承了这两个:
interface ICardRepository : IGenericRepository<Card>
{
}
和
class CardRepository : GenericRepository<EfContext, Card>,
ICardRepository
{
}
使用Unity我注册接口和类如下:
container.RegisterType<ICardRepository, CardRepository>();
现在问题是:我可以使用IGenericRepository而不是ICardRepository
吗?
像这样:
container.RegisterType<IGenericRepository<Card>, CardRepository>();
理论上我可以,但由于我仍然不知道这种模式是如何运作的,所以我不确定我是不是在破坏或遗漏某些东西。
答案 0 :(得分:1)
现在您可能需要解决IGenericRepository<Card>
而非ICardRepository
的问题。
这不起作用:
var cardRepository = container.Resolve<ICardRepository>();
相反,你必须这样做:
var cardRepository = container.Resolve<IGenericRepository<Card>>();
这也意味着如果你正在做类似构造函数注入的事情,你就不能使用:
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
}
}