Design patterns 依赖注入:如何克服循环依赖
谢谢你的阅读 我正在使用Unity框架在我的应用程序(ASP.Net MVC)中实现依赖项注入。 有时,我希望避免服务之间存在一些循环依赖关系 所以我在寻找解决方案:)Design patterns 依赖注入:如何克服循环依赖,design-patterns,dependency-injection,unity-container,Design Patterns,Dependency Injection,Unity Container,谢谢你的阅读 我正在使用Unity框架在我的应用程序(ASP.Net MVC)中实现依赖项注入。 有时,我希望避免服务之间存在一些循环依赖关系 所以我在寻找解决方案:) 我的案例 让我们想象三种服务Sally,ServiceJoe,ServiceJudy 服务萨利依靠服务乔 服务乔依靠服务朱迪 ServiceJudy依赖于ServiceSally(这取决于您使用的DI框架(如果有的话)。例如,只要不是每个涉及的bean(对象)都由构造函数初始化,它就会处理这种循环依赖关系。基本上,它会将空对象
我的案例 让我们想象三种服务Sally,ServiceJoe,ServiceJudy 服务萨利依靠服务乔 服务乔依靠服务朱迪 ServiceJudy依赖于ServiceSally(这取决于您使用的DI框架(如果有的话)。例如,只要不是每个涉及的bean(对象)都由构造函数初始化,它就会处理这种循环依赖关系。基本上,它会将空对象注入(至少)另一个bean,稍后对其进行初始化。因此序列类似于:
一般来说,至少在我的经验中,循环依赖性是一个设计在某些方面存在缺陷或需要简化的症状。不要让一个服务*依赖于另一个具体的服务*。让它们依赖于一个超类或接口。然后在创建后将一个具体的服务*注入另一个服务*。我在某种程度上同意克莱特斯的观点,每当你发现自己的服务相互依赖时,是时候坐下来重新思考你的设计了
如果你做“懒惰的DI”,你为什么要做DI?使用DI的好处之一是不必担心你的依赖项被初始化时,你只需要在你需要它们的时候把它们放在那里。Hi Cletus,谢谢你的回答:)+1我在使用Unity。你说得对,我认为可能需要简化。。但在项目生命周期的这一点上,它将被推迟一段时间;)尊重春天的方式做这件事。。。那么使用lazy DI是个好主意第九步。ServiceSally实例不是为ServiceJudy创建的,因为步骤3完成了所有对象创建阶段,对吗OSD”:在这种情况下,惰性DI并不是一个好主意,它只是唯一的选择。+1表示“一般来说……循环依赖性是有缺陷的设计的症状……或者需要简化。“在某些特定的、罕见的情况下,循环依赖可能是问题的最佳解决方案,但这种情况很少见。我编写了自己的依赖注入程序来处理循环依赖。也许我应该使用Spring,但是Spring对于我自己的项目来说听起来有点太“沉重”,而且我不喜欢使用xml文件来编写代码。我的注射器在这里:谢谢你的解决方案Ozan+1非常有创意:D