Unity:如何通过基接口解析类

时间:2010-11-30 20:05:39

标签: .net dependency-injection unity-container

这是我的存储库类:

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。我应该两次注册课程吗?

2 个答案:

答案 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>();
相关问题