2014-12-04 72 views
0

使用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")) 
    ); 

比方说,我希望我的默认注册做同样的作为“命名第二”注册。我能做到这一点:

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

如何

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

没有测试过这一点,但它应该只是你需要什么做的。

+0

看起来很健康。我害怕在“注册时间”解析界面,但我不知道为什么我没有考虑使用lambda表达式。我明天会进行测试,但我没有看到有什么理由不起作用。 – Tipx 2014-12-05 04:28:28

+0

工作很好,谢谢先生! – Tipx 2014-12-05 16:26:26