2010-06-22 58 views
0

我的工作目前正使用的MS應用程序塊的項目。我看到'Unity'dll可用於我。它的版本是1.1。我如何在這裏使用依賴注入?我可以在這裏利用依賴注入嗎?

我有一個類

public class ScheduleDataDetailsDC 
{ 
    public int ScheduleID; 
    public List<ScheduleRateLineItem> MinRateList; 
    public List<ScheduleRateLineItem> MaxRateList; 
    public List<ScheduleRateLineItem> VotRateList; 
    public List<ScheduleLOSRateDC> LosRateList; 
    public List<ScheduleRateParamsDC> RateParams; 
} 

所以,當我新起來我這樣做...

統一1.1可以幫助我反正這裏?我想只能使用var x = new ScheduleDetailsDC(),並且這5個內部列表將爲我初始化。 Unity能爲我做些什麼嗎?請注意我以前從未使用DI。

感謝任何指針, 〜CK在聖地亞哥

回答

2

做將是初始化列表在構造函數中,並通過使它們成性拒絕從其他類向他們直接訪問的最好的事情:

public class ScheduleDataDetailsDC 
{ 
    public ScheduleDataDetailsDC() 
    { 
     this.MinRateList = new List<ScheduleRateLineItem>(); 
     //inialise other lists 
    } 

    public List<ScheduleRateLineItem> MinRateList { get; private set; } 
    ... 
} 

這似乎並不認爲依賴注入真的可以在這裏使用,因爲類似乎是一個簡單的數據容器,雖然很難說沒有更多的上下文。

0

是統一可以幫助你,但我認爲這不是這種情況。你可以只初始化列表的前前後後對象給他們默認實例,團結與任何其他IoC容器不應該被用來作爲一個簡單的對象生成器(儘管它可以)。

0

我不知道具體是什麼1.1版本統一的細節,但每當你使用控制容器的反轉通常來說,你必須要經過以下步驟:

  1. 註冊您的IoC容器(您的案例中的Unity)知道的類型。這包括您計劃請求的所有主要類型,以及所有相關類型。在你的情況,你需要讓它知道ScheduleDataDetailsDC,什麼,究竟需要進入每一個被認爲是依賴
  2. 你的類型應該指定所有必需的依賴構造函數的參數的列表。這是IoC容器將要查看的內容,以確定需要注入的內容。如果您有可選的依賴,那麼你可以使用屬性注入來支持(如果你的IoC容器支持的話,我認爲統一所做的)
  3. 你必須要求你註冊的類型從容器的一個實例。你怎麼做這取決於你的容器。應該有像Get<T>()Resolve<T>這樣的方法。通常,您將要求「最高級別」類的實例,即在您的軟件入口點附近使用的實例。如果你這樣做,你已申請依賴注入的所有相關類的路線(你正確地註冊的所有相關類型的),你應該得到一個對象與它的所有供應的依賴,同樣所有這些對象的依賴應該提供,並在下線。

也往往看到連同國際奧委會採用了大量的接口,因爲你可以綁定一個具體類型的接口類型,然後指定接口的依賴。這允許您在綁定過程中應用業務規則和配置值,以便在需要執行此類操作的情況下使用不同的具體實現。

因此,考慮到所有這些,很難說在上述情況下使用Unity會涉及什麼。首先,您需要註冊ScheduleDataDetailsDC,但爲了獲得依賴關係,您還需要註冊每個List類型,或者更具體地註冊每個列表中的每個具體對象(然後,當然還有所有依賴關係這些類)。由於我不確定這些列表的作用是什麼,因此我很難說出如何做到這一點(或者即使可以這樣做)。