我有一個用作數據模型的類。我將簡化它是這樣的:混合封裝和依賴注入
public class DataModel
{
public bool IsDataModelActive {get; internal set;}
}
那麼,誰將會用我的DLL的程序員將只能看到他們需要的東西,而不用擔心打破任何東西。
另一方面,我想在我的課程中使用DI,使用DataModel
。所以,我必須創建一個接口:
public interface IDataModel
{
bool IsDataModelActive {get;}
}
所以我注入這在我的課:
public class Class1
{
IDataModel dataModel;
public Class1(IDataModel dataModel)
{
this.dataModel = dataModel
}
}
在這種情況下,這是不可能的,我訪問dataModel.IsDataModelActive的制定者。
我發現最好的補丁是接受注射後投:
public class Class1
{
DataModel dataModel;
public Class1(IDataModel dataModel)
{
this.dataModel = (DataModel)dataModel
}
}
這有助於爲單元測試,但它那種打破DI的整個概念。如果我有另一個實施IDataModel
的課程,該怎麼辦?
你/你會用什麼策略?
這將使sens。所以我必須選擇將我的製片人展示給世界,而不是使用DI。那真不幸! – Mathieu 2012-03-01 16:54:30
或者這可能只是我身邊的糟糕設計? – Mathieu 2012-03-01 16:59:15
只是不好的設計可能(沒有進攻)。什麼定義了「IsDataModelActive」應該是真還是假? – 2012-03-01 17:02:48