2009-06-03 56 views
0

全局變量,所以說,我有型,需要一些參數構造函數,像這樣:的IoC VS庫

public MyType(IComObject wrapper,string table) {} 

現在IComObject是在兩個不同的COM對象的包裝。所有(90%)我的類型必須使用 IComObject,所以在良好的DI方式(以便測試)中,我將IComObject傳遞給每個需要它的類型。

主要問題是,當有人去使用我的COM包裝庫時,必須將IComObject的一個實例傳遞給它所做的所有事情,這使得代碼有點難以管理和維護。

我想知道是否應該使用IoC容器或用戶可以設置的全局變量,以便它們不必傳遞IComOject實例。例如:

public MyType(string table) 
     : this(IoC.Resolve<IComObject>,table) {} 

public MyType(string table) 
    : this(StaticClass.ComInstance,table) {} 

這樣用戶可以這樣做:

//Set up Ioc container 
COMObject object = new COMObject(); 
Ioc.Register(typeof(IComObject),object); 
MyType mytype = new MyType("test.tab"); 

COMObject object = new COMObject(); 
StaticClass.ComInstance = object; 
MyType mytype = new MyType("test.tab"); 

你覺得我應該在這種情況下做?

回答

0

使用容器,這是他們的重點。我只使用了StructureMap,但我可以肯定地推薦它。大量的文檔,它很容易啓動和運行。一旦你對它的工作感到滿意,你會愛上它讓事情變得容易。爲獲勝而脫鉤!

在現實中,你的容器將是您查詢對象的靜態類,所以有幾分心不是一個真正的選擇:)

+0

我只是擔心讓用戶不得不擔心設置IoC容器。 – 2009-06-03 21:38:29

1

國際奧委會肯定是要走的路。 Globals不是編程中最糟糕的邪惡,少數全局並不是最糟糕的事情,但IoC是一個很好的,乾淨的模式,從長遠來看,它是很好理解和易於維護的。 IoC的依賴性也更加明確。