2014-12-04 71 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