我有一个用作数据模型的类。我将简化它是这样的:混合封装和依赖注入
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