在当前项目中,我们尝试使用构造函数来获取服务,例如:
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()之前设置公共属性。
在调用方法之前设置必需的属性是一个好习惯。不应该用已经存在的一切构建服务吗?
答案 0 :(得分:1)
这确实是糟糕的设计。 “PublicProperty”应该是DoWork方法的参数,或 PublicPropery应该由容器设置。
答案 1 :(得分:0)
大多数IOC容器都能够配置默认值..因此,您可以将自己配置为默认值,并且只在必要时进行修改。
答案 2 :(得分:0)
我认为这被称为"时间耦合"。你希望以某种顺序调用两个动作,并且当它们被错误地调用时会发生坏事。
改为使用 DoWork(PublicProperty prop)。
注入的服务应该是无状态的,或者在构造函数中预先设置一个。不要让你的服务在未初始化状态下浮动。