来自IoC的有状态对象

时间:2014-02-28 02:59:13

标签: oop design-patterns inversion-of-control

在当前项目中,我们尝试使用构造函数来获取服务,例如:

public class FirstService {

   private SecondService _second;

   public FirstService(SecondService second) {
        _second = second;
   }

   public void DoSomething() {
        _second.PublicProperty = "some value required by service to work properly";

        _second.DoWork();
   }        

}

重要的是在调用公共方法DoWork()之前设置公共属性。

在调用方法之前设置必需的属性是一个好习惯。不应该用已经存在的一切构建服务吗?

3 个答案:

答案 0 :(得分:1)

这确实是糟糕的设计。 “PublicProperty”应该是DoWork方法的参数, PublicPropery应该由容器设置。

答案 1 :(得分:0)

大多数IOC容器都能够配置默认值..因此,您可以将自己配置为默认值,并且只在必要时进行修改。

答案 2 :(得分:0)

我认为这被称为"时间耦合"。你希望以某种顺序调用两个动作,并且当它们被错误地调用时会发生坏事。

改为使用 DoWork(PublicProperty prop)

注入的服务应该是无状态的,或者在构造函数中预先设置一个。不要让你的服务在未初始化状态下浮动。

相关问题