2010-08-09 168 views
1

讓我們討論一兩件事: 我有一些簡單的接口:最佳實踐:調用getInstance方法來實例化對象

public interface ICar 
{ 
    void StartEngine(); 
    void StopEngine(); 
} 

public interface IRadio 
{ 
    //doesn't matter 
} 

一些實施:

public class SportCar : ICar 
{ 
    private IRadio radio; 
    public SportCar(IRadio radioObj) 
    { 
    radio = radioObj; 
    } 
    //all the rest goes here  
} 

我們也有我們的StructureMap初始化代碼,我們將其打開程序初始化:

private void InitializeStructureMap() 
{ 
    ObjectFactory.Initialize(x=> 
    { 
    x.For<ICar>.Use<SportCar>(); 
    x.For<IRadio>.Use<CarAudioSystem>(); 
    }); 
} 

而我的問題是:實例化SportCar的最佳做法是什麼?正在通話:

ObjectFactory.GetInstance<ICar>() 

一個很好的做法(現在我現在不用其他方式來解決這個問題了)?

回答

3

ObjectFactory.GetInstance是你的出發點,這是你用來解決層次中的第一個對象。

這是我開始我的WinForms應用程序,同樣的方法應該適用於Web窗體,Windows服務和控制檯應用程序:

var main = ObjectFactory.GetInstance<Main>(); 
Application.Run(main); 

對於ASP.NET MVC框架允許您註冊一個工廠,創建你的控制器,但即使在該工廠,你也可以調用ObjectFactory.GetInstance來實現控制器的實例化。

補充說明: 當你初始化,您沒有明確需要映射到ICAR除非SportCar您有多個ICAR實現,你可以做

x.Scan(a => { a.TheCallingAssembly(); a.WithDefaultConventions(); }); 

它西港島線的接口地圖默認實現。

+0

我只要求對象初始化提示 - 這只是示例代碼,所以請隨時在對象初始化主題回答我。 – Dariusz 2010-08-20 09:58:41

+0

我已經更新了我的答案,讓您對答案有更多的瞭解。 – 2010-08-20 13:00:10