这是我的存储库类:
public interface IMyRepository : IRepository<IMyEntity>{}
public class MyRepository : IMyRepository
{
...
}
以下是注册方式:
container.Register<IMyRepository, MyRepository >();
以下是我希望如何解决存储库问题的方法:
IRepository<IMyEntity> repository = container.Resolve<IRepository<IMyEntity>>();
尝试以这种方式解决存储库会出错:
依赖项的解析失败,type =“CMCore.Repository.IRepository`1 [CMCore.Data.ICmCoreLog]”,name =“(none)”。 在解决时发生异常。
异常是:InvalidOperationException - 当前类型IRepository`1 [IMyEntity]是一个接口,无法构造。你错过了类型映射吗?
在例外时,容器是:
解析IRepository`1 [IMyEntity],(无)
我的做法有什么问题?什么是实现上述功能的正确方法?
非常感谢!
P.S。有时我想通过IMyRepository解析我的类,有时通过IRepository。我应该两次注册课程吗?
答案 0 :(得分:3)
执行:
container.RegisterType<IRepository<IMyEntity>, MyRepository>();
代替。 Unity,按设计,只进行一级类型映射。它只会从你问的类型中寻找一个映射,它不会追逐继承树。
如果您希望它既可以使用IRepository,也可以作为IMyRepository,那么只需注册两次:
container.RegisterType<IRepository<IMyEntity>, MyRepository>()
.RegisterType<IMyRepository, MyRepository>();
答案 1 :(得分:1)
IMyRepository repository = container.Resolve<IMyRepository>();