所以情况就是这样:当我在一个构造函数中注入一个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
}
}
答案 0 :(得分:0)
要完成这项工作,您必须像任何其他类型一样注册Services
。 Unity容器寄存器IUnityContainer
默认情况下,这就是为什么你可以注入统一接口,但不是你的具体实现。
services.RegisterInstance<Services>(services);
作为注册码的一部分应该可以解决问题。