为什么Unity不能注入具体的容器实现而不是IUnityContainer?

时间:2015-05-29 11:35:02

标签: c# dependency-injection unity-container

所以情况就是这样:当我在一个构造函数中注入一个IUnityContainer时,事情就好了就好了。但是,我所做的是UnityContainer继承,即

class Services : UnityContainer

现在,当我注入Services时,我得到了课程,但所有注册都丢失了:(

我当然可以注入IUnityContainer并将其投放到Services(它有效),但我宁愿只注入Services

我做错了什么?

编辑按大众需求,这里有一些源代码:

class Services : UnityContainer
{
  // some of my personal stuff here; nothing important
}

// later, in Program.cs
IUnityContainer uc = new Services();
services.RegisterType<Foo,Bar>();
Application.Run(services.Resolve<MainFrame>());

// and then, elsewhere
class Test
{
  public Test(Services svcs)
  {
    var bar = svcs.Resolve<Foo>(); // this fails - no registration in svcs
  }

  // on the other hand, this works just fine:
  public Test(IUnityContainer svcs)
  {
    var s = (Services)svcs;
    var bar = s.Resolve<Foo>(); // works just fine
  }
}

1 个答案:

答案 0 :(得分:0)

要完成这项工作,您必须像任何其他类型一样注册Services。 Unity容器寄存器IUnityContainer默认情况下,这就是为什么你可以注入统一接口,但不是你的具体实现。

services.RegisterInstance<Services>(services);作为注册码的一部分应该可以解决问题。