不同组件中单身人士之间的依赖关系

时间:2012-03-12 14:01:16

标签: c#

单例B初始化单例A.单例A不知道B.我们如何使用A并确保B先完成初始化程序?

B和A在不同的程序集中,由不同的团队维护。

尝试使实现完全独立。


最好的答案似乎就是不要。这就是我在想的想法:

通过实现特定接口的注册类启动初始化。如果调用DoSomething,并且T在我们之前没有见过的程序集中,那么我们将搜索具有给定IRegistration接口的类。

所以...那将摆脱依赖。它使用反射。每次调用一个方法时,我们都必须查找类型程序集home,但不一定要付出太高的代价

2 个答案:

答案 0 :(得分:1)

我建议引入在启动时运行的非单例X,并按照你需要的顺序初始化两个单例,从而从单例中去除知道应该初始化它们的顺序的责任(这对他们来说是不合适的)知道,无论如何)。

从那里开始,我会考虑重构它们不是单身,并且通过构造函数注入将B引用给A,因为B显然依赖于A。

答案 1 :(得分:1)

您的问题所暗示的耦合程度让我对您的设计质量产生了严重怀疑。

  1. 你的问题的答案几乎肯定不是单身人士。它们应该非常罕见。
  2. 如果A不知道B,那么在B之后不应该需要A被初始化。相反,B应该能够使用A,无论A是初始化还是初始化。
  3. 如果必须这样做,请勿使用延迟实例化。在静态构造函数中进行初始化,并确保在任何需要两者的代码中在A之前引​​用B.