我有一个充当数据模型的类。我将这样简化:

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/

10-09 15:55