依赖注入可以防止循环依赖?

<p>项目#1有一些接口和类项目#2的参考。 P&gt; </p><p>现在我想用工程#2#项目1的实施,但vs.net抱怨循环依赖。 P&gt; </p><p>如果我是使用扶养注射项目#1和绑定到项目#2的实现(因为它符合接口的合同),将这项工作或我仍然会得到循环依赖错误消息,在运行时?&lt; / P&gt;
</p>

32 浏览 1 回复
  gt   依赖   接口   循环   一个  

回复

    <p>您可能的<em>可以 em&gt;的解决了这个与DI,但你的<em>不应该 em&gt;的。 P&gt; <p>如果我理解正确的话,你有这样的事情: P&gt; +大会A +组件B | | + - 接口IFoo的+ - 类ConcreteFoo:IFoo的 | ^ + - MyClass类 - &gt; -------&gt; ------- | </p><p>在换句话说,你正在试图获得 参考,但你不能因为集会, 哪 居住在已经依赖于 在 P&gt; </p><p>这是一个设计错误。如果声明的接口 在大会,但没有具体的实现,那么任何其他接口/类组件 应<strong>仅 STRONG&gt;引用,<strong>永远 STRONG&gt;实现它的具体类。 P&gt; <p>有三种方法可以消除循环依赖: P&gt; </p><ol> <li> <p>请 依赖于 代替。这可能是最好的选择,如果你能做到这一点。如果问题是,你需要的物理实例 在使用 不知道在哪里可以得到一个从,然后有它采取 在构造 - 让任何人使用 弄清楚什么 使用。 p&gt; li&gt; </p></li><li> <p>将接口来自己组装。这仍然是一个相当不错的做法。你的设计是这样的: p&gt; li&gt; OL&gt; +组装应用+组件接口+组装混凝土 | | | | + - 接口的IFoo | | | \ | + - MyClass类| \ ------ + - 类ConcreteFoo | | | ^ + ----会员美孚 - &gt; ---------------------&gt; ------------------- | </p><ol> <li>将 自身组装。有效的依赖关系树看起来一样的#2以上,但如果集会 比小得多 那么这将需要更少的努力。 li&gt; OL&gt; <p>希望有所帮助。 P&gt; </p><p>您通常可以解决与使用抽象工厂依赖注入(DI)循环依赖的问题。请参阅here为例。 P&gt; </p><p>不过,虽然你可能能够解决与DI的问题,倒不如重新设计的API,使循环依赖走开。 P&gt; </p><p>您通常可以通过改变从一个基于查询API的末端到一个破发一个循环依赖<strong>基于事件的 STRONG&gt; API P&gt;
    </strong></p></li></ol></li></ol></strong></strong></p></em></em></p>

    闫玲

相关信息

Visual Studio 2008的项目组织执行和组装

<p>我有一个问题,建立在Visual Studio 2008中的以下:父项目,其中包括入口点Main()方法的类并声明了一个接口,并具有实现在父声明的接口类子项目项目。 p&gt; </p><p>我已经指定了父母的输出类型是一个控制台应用程序,以及孩子的输出类型是一个类库。在孩子我有添加到父作为项目的参考,并规定儿童取决于家长和构建顺序应该是父母,然后...

22 浏览 1 回复   项目   gt   一个   孩子   exe  

C ++怎么做才能处理循环依赖?

<p>通常情况下,如果我的#include链得到通知,我由一个向前声明替换#包括一个解决它,然后将所有功能的实现依赖于这种类型的成cpp文件,在那里我#包括头来代替。 p&gt; </p><p>但是 - 在某些情况下它的坏把功能实现到cpp文件 - 使用模板或内联函数打交道时,特别是 P&gt; </p><p>所以 - ?...

50 浏览 1 回复   gt   这种   声明   依赖   文件  

C ++项目依赖发行的Visual Studio 2005

<p>我的工作是定期删除特定文件夹中文件的dataManagement项目。该解决方案具有三个项目,其中,一个是应用和其他两个是静态库。现在我要增加一个项目,该项目是用于记录静态库。日志记录静态库项目有哪些应用程序项目指的头文件。当我构建解决方案,我因为找不到头文件得到错误。当我加入了记录静态库项目,我也做了应用程序项目依赖于它通过检查项目依赖相应的BIX。 任何人都可以请帮我吗? P...

38 浏览 1 回复   项目   文件   gt   头文件   静态  

在使用/ clr一个Visual Studio C ++项目,是它的依赖也编译托管代码?

<p>要有点更清晰。如果我有一个具有两个项目的Visual Studio C ++的解决方案,比如使用CLR支持静态库关闭,并使用CLR支持的第二个项目打开取决于这个静态库,并静态库被编译为托管代码?有关CLR的项目使用的是外部的这种解决方案库,什么他们也被编译为托管代码? P&gt; </p>

26 浏览 1 回复   托管   编译   项目   代码   静态  

后端模块需要从表现层的URL - 如何避免循环依赖?

<p> URL生成在我的web应用程序是负责表现层。 现在考虑另一个模块发送包含URL的邮件。 (不neccessarily从表现触发)。 然而,表示层必须知道有关模块(因为它的<em>可能 em&gt;的是扳机,并且用户可以使用前端配置模块)。 P&gt; <p>即。这些模块彼此相依的...这循环依赖如何避免任何想法? P&gt; <...

15 浏览 1 回复   模块   gt   依赖   url   表现