2013-04-26 58 views
0

我已經查看了一些線程(可能我使用了錯誤的術語),但是我正在將Web應用程序轉換爲通過NInject使用IoC。我的其他IoC的項目是相當小的,所以還不是一個大問題,但什麼是以下情況,推薦的做法...轉換爲IoC,如何處理內部對象

我對象的結構看起來像這樣...

public class Address 
{ 
    public virtual string Street { get; set; } 
    public virtual City City { get; set; } 
} 

市是它自己的對象...

public class City 
{ 
    public virtual string Name { get; set; } 
} 

現在,我一直在處理不可避免的「對象爲空」異常如下...

public void DoThing() 
{ 
    new Address address(); 
    address.Street = _street; 
    address.City = new City(); 
    address.City.Name = _cityName; 
    DoOtherThing(address); 
} 

這對於較小的項目來說很好......但現在我們正在談論更大的事情,它變成了一件真正的瑣事。 (添加另一個目的是我的對象,這可能意味着我需要做的這100多個地方,假設我找到他們)

此前的IoC這是做這樣的東西好辦......

public class Address 
{ 
    private string street; 
    private City city; 

    public Address() 
    { 
     street = string.Empty; 
     City = new City(); 
    } 

    public string Street 
    { 
     get { return street; } 
     set { street = value; } 
    } 
} 

我想弄清楚什麼(也許我完全錯過了我讀過的指南中的這個細節)是如何以優雅的方式在IoC中實現等價物?

我下面的結構是基於送行http://www.develop.com/onionarchitecture

唯一顯着的區別就是我沒有什麼我的服務水平還因爲大多數的我們的東西僅僅是從讀由託尼·斯尼德提出的一個/寫入數據庫時​​,兩者之間的操作非常少。 (我可能需要在服務級別上放置一些東西,但還沒有達到目標,仍然不完全清楚該級別與存儲庫相關的內容。)

讓我知道是否存在我可以提供有用的細節(IoC工作正常,我只需要解決上述問題,以保持合理的維護性)

回答

2

如果你所做的只是創建一個空對象,那麼就沒有真正的使用IoC的理由(更好的術語是依賴注入,因爲它更具體)。除非你將一個加載的City對象傳遞給Address對象,否則只要在構造函數中使用new。在這種情況下使用IoC/DI沒有任何好處。

當您需要在運行時將依賴關係傳遞給對象時,應該使用DI。雖然這在技術上是依賴性的,但它是一個簡單的空對象並不能成爲一個好選擇。

+0

只是試圖澄清,你說的是當我真正準備使用對象,如上面的「DoThing」方法,繼續以這種方式使用它? 或者你的意思是以我在DI之前總是擁有的方式使用對象類。 (我實際上並沒有在對象中使用DI,我只是在引用這些對象,我的存儲庫就是注入的對象)。 – RualStorge 2013-04-26 16:31:34

+0

@RualStorge - 我說你總是這樣做沒什麼問題。 – 2013-04-26 17:58:56

+0

謝謝,我會將它切換回來。我想我是按照我見過的例子來完成它的。我以爲我錯過了一些難題。再次感謝。 – RualStorge 2013-04-26 18:30:25

相關問題