2009-06-24 152 views
1

我正嘗試第一次使用Unity,我想我可能會咬掉比我可以咀嚼的更多。我們有一個n層應用程序,它有一個包含多個抽象類型的基本庫,然後包含幾個具有特定類型的業務情景特定庫。例如:抽象類型主角有兩個實現,一個在NewAutomotiveLibrary中稱爲NewAutomotiveLead,另一個在AutomotiveFinanceLibrary中稱爲AutomotiveFinanceLead。在基本庫中,我們有一組適配器,可以像Lead一樣在基本類型上執行邏輯。Unity新手問題

我試圖用統一的第一次返回的接口ILeadDuplication,當解決了,要麼返回或NewAutomotiveLeadDuplication時AutomotiveFinanceLeadDuplication我呼籲ILeadDuplication決心和實例通過其中任一「NewAutomotive」的字符串值或「AutomotiveFinance」(在容器上調用RegisterType時映射的名稱)。像這樣:

using (IUnityContainer container = new UnityContainer()) 
    { 
    container 
     .RegisterType<ILeadDuplication, AutomotiveFinanceLeadDuplication>("AutomotiveFinance") 
     .RegisterType<ILeadDuplication, NewAutomotiveLeadDuplication>("NewAutomotive"); 

    ILeadDuplication dupe = container.Resolve<ILeadDuplication>("AutomotiveFinance"); 
    Console.WriteLine(dupe.Created); 
    } 

注意:這是爲了說明,因爲庫不知道的有關ILeadDuplication實際登記需要在配置文件中做了concreate類的任何信息。

雖然這一切的偉大工程,我需要把它更進了一步。在調用resolve時,我需要能夠傳入Lead類型的參數,這是NewAutomotiveLead或AutomotiveFinanceLead的基類型。

我需要知道Unity是否可能神奇地查找具體到具體實例AutomotiveFinanceLead的特性,例如Lead上不存在的「GrossMonthlyIncome」,並將其分配給新創建的AutomotiveFinanceLeadDuplication實例屬性GrossMonthlyIncome。

我有效希望能夠在基礎庫對ILeadDuplication的實例進行了一組通用的邏輯甚至認爲產生的實例和被映射屬性不熟悉它。

謝謝!

回答

0

不太清楚你所追求的,但我的猜測是,你要在施工時間的依賴性通過。這可以通過多種方式完成,但這裏有一個例子。

[InjectionConstructor] 
public class MyClass([Dependency("Named")] MyOtherClass other) 
{ 

} 

,以便爲工作名爲MyOtherClass依賴性「命名」必須在容器中或者通過配置或通過經由所述RegisterType方法加入。

讓我知道如果I'm關閉基地,也許我還可以幫你......我曾經在不同的情況下工作了很多與團結,只要我知道你想完成我也許能到什麼幫助你。

0

我不明白爲什麼你想要的容器有責任。但我認爲你可以這樣來做:

你通話時解決就在()來獲取ILeadDuplication的一個新實例,你可以註冊鉛的情況下使用和GrossMonthlyIncome的值使用方法:

Lead lead = new NewAutomotiveLead() 
    container.RegisterInstance<Lead>(lead); 
    container.RegisterInstance<int>("GrossMonthlyIncome", lead.GrossMonthlyIncome); 
    ILeadDuplication dupe = container.Resolve<ILeadDuplication>("AutomotiveFinance"); 

如果具體類型有一個名爲「GrossMonthlyIncome」的依賴,該值將在那裏注射。如果具體類型的構造函數採用Lead實例,則實例將注入該構造函數參數中。