c# - 混合封装和依赖注入(inject)

标签 c# interface dependency-injection

我有一个用作数据模型的类。我会像这样简化它:

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/

相关文章:

java - 如何在JMockit中调用@Injectable注解的类实例中的真实方法?

c# - Automapper 5.0全局配置

c++ - 定义自引用接口(interface)的正确方法是什么?

c# - 具有多个接口(interface)限制的方法参数

java - 允许单位使用设计模式在 Java 中攻击地面、空中或两者的能力的接口(interface)

javascript - 具有 (ES6) 类和继承的 Angular.js DI

java - Google Guice,如何在注入(inject)类之前和之后注入(inject)资源

c# - 在 MVC5 中指定日期格式 (dd/MM/yyyy)

c# - "hill climbing, change max number of threads 5"在我加载数据时以 xamarin 形式在我的 android 设备上调试时

c# - 如何处理 async "using"语句陷阱?