注册默认的命名注册

时间:2014-12-04 20:59:25

标签: c# inversion-of-control unity-container

使用Unity,您可以注册一个接口,以便它解析带有一些参数的类型,并且您也可以进行命名注册:

container.RegisterType<IInterface, MyClass>(
    new InjectionConstructor(new ResolvedParameter<string>("Default"))
    );

container.RegisterType<IInterface, MyClass>(
    "Named First",
    new InjectionConstructor(new ResolvedParameter<string>("Named First"))
    );

container.RegisterType<IInterface, MyClass>(
    "Named Second",
    new InjectionConstructor(new ResolvedParameter<string>("Named Second"))
    );

让我们说我希望我的默认注册与&#34;命名为Second&#34;注册。我能做到这一点:

container.RegisterType<IInterface, MyClass>(
    new InjectionConstructor(new ResolvedParameter<string>("Named Second"))
    );

有没有办法让默认(未命名?)注册朝向第二个命名注册,而不是复制整个事情?类似的东西:

container.RegisterType<IInterface, IInterface("Named Second")>(); // Doesn't work.

在这个例子中,它只是一个带有一个参数的构造函数,但是让我们说构造函数需要8个接口,2个InjectionProperties和一个InjectionMethod,你不想复制它,冒着风险不同步。

1 个答案:

答案 0 :(得分:1)

怎么样

container.RegisterType<IInterface>( new InjectionFactory(
   c => c.Resolve<IInterface>( "Named Second" ) ) );

没有测试过,但它应该只做你需要的。