我正在編寫一個COM對象頂部的API,並且必須將COM對象傳遞到幾乎每種類型和靜態方法中,以便我可以測試每個部分我的API。使用IoC容器的重載方法
現在我的問題是我有一個重載的方法爲那個接受COM對象,但通過IoC解析一個而不是另一個,所以API的用戶不必擔心傳遞在COM對象中,或者我應該刪除重載的方法,只是解決它沒有選項來傳遞它。
有點難以解釋,所以這裏是一個例子;
構造子例子;
FooType(IComObject obj,string table) {}
FooType(string table) : this(Ioc.Resolve<IComObject>(), table) {}
或只是
FooType(string table) : this(Ioc.Resolve<IComObject>(), table) {}
靜態方法示例;
public static SomeType Create(IComObject obj,string table)
{ // Do some work with obj}
public static SomeType Create(string table)
{
return MyClass.Create(Ioc.Resolve<IComObject>(),table);
}
或只是
public static SomeType Create(string table)
{
IComObject obj = Ioc.Resolve<IComObject>();
return MyClass.Create(Ioc.Resolve<IComObject>(),table);
}
我與超載最大的擔心是,它會創造出很多的,只是剛愎調用方法。我還有什麼其他選擇,或者是解決這個問題的正確方法?
P.S我真的不想讓用戶不得不在整個應用程序周圍傳遞一個IComObject實例。
這看起來像一個延續的問題在:http://stackoverflow.com/questions/947378/ioc-vs-global-variable-in-library給我? – jerryjvl 2009-06-04 07:01:21
是的,它更像是擔心在這一個污點和可發現性。 – 2009-06-04 07:04:34