我有一个充当数据模型的类。我将这样简化:
public class DataModel
{
public bool IsDataModelActive {get; internal set;}
}
因此,使用我的DLL的程序员只会看到他们需要的内容,而不会冒险破坏任何东西。
另一方面,我想在使用
DataModel
的类中使用DI。所以我必须创建一个接口: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
的类怎么办?您/您将使用什么策略?
最佳答案
如果接口IDataModel不允许您从DataModel外部访问设置器,那么(希望并不奇怪)您不需要从DataModel外部访问设置器。 DataModel本身或可以看到setter的对象都应负责设置该值。
关于c# - 混合封装和依赖注入(inject),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9519287/