我有一个用作数据模型的类。我会像这样简化它:
public class DataModel
{
public bool IsDataModelActive {get; internal set;}
}
因此,使用我的 DLL 的程序员将只看到他们需要的东西,而不会冒破坏任何东西的风险。
另一方面,我想在使用 DataModel
的类中使用 DI。所以我必须创建一个界面:
public interface IDataModel
{
bool IsDataModelActive {get;}
}
所以我在类里面注入(inject)了这个:
public class Class1
{
IDataModel dataModel;
public Class1(IDataModel dataModel)
{
this.dataModel = dataModel
}
}
在这种情况下,我无法访问 dataModel.IsDataModelActive 的 setter。
我发现最好的补丁是在接受注入(inject)后施放:
public class Class1
{
DataModel dataModel;
public Class1(IDataModel dataModel)
{
this.dataModel = (DataModel)dataModel
}
}
这有助于单元测试,但它打破了 DI 的整个概念。如果我有另一个实现 IDataModel
的类怎么办?
你/你会使用什么策略?
最佳答案
如果接口(interface) IDataModel 不允许您从 DataModel 外部访问 setter,那么(希望这不会令人惊讶)您不应该需要从 DataModel 外部访问 setter。 DataModel 本身或可以看到 setter 的东西应该负责设置该值。
关于c# - 混合封装和依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9519287/