我有一个用作数据模型的类。我会像这样简化它:
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的setter。
我发现最好的补丁是在接受注射后施放:
public class Class1
{
DataModel dataModel;
public Class1(IDataModel dataModel)
{
this.dataModel = (DataModel)dataModel
}
}
这有助于单元测试,但它打破了DI的整个概念。如果我有另一个实现IDataModel
的类?
您/您将使用什么策略?
答案 0 :(得分:3)
如果接口IDataModel不允许您从DataModel外部访问setter,那么(希望不出意外)您不应该需要从DataModel外部访问setter。 DataModel本身或可以看到setter的东西应该负责设置该值。
答案 1 :(得分:2)
Class1是否公开可见 - 即暴露给消费者?如果没有,则创建另一个内部接口IDataModelInt:IDataModel并在那里提供setter。使用第二个进行内部工作。