混合封装和依赖注入

时间:2012-03-01 15:49:29

标签: c# interface dependency-injection

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

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的类?

,该怎么办?

您/您将使用什么策略?

2 个答案:

答案 0 :(得分:3)

如果接口IDataModel不允许您从DataModel外部访问setter,那么(希望不出意外)您不应该需要从DataModel外部访问setter。 DataModel本身或可以看到setter的东西应该负责设置该值。

答案 1 :(得分:2)

Class1是否公开可见 - 即暴露给消费者?如果没有,则创建另一个内部接口IDataModelInt:IDataModel并在那里提供setter。使用第二个进行内部工作。