vb.net - 如何解决循环依赖

标签 vb.net dependency-injection unity-container ioc-container circular-dependency

您好,我的代码结构有问题,它以某种方式进入循环依赖。这是我的代码的解释:

我有一个ProjectA,其中包含BaseProcessor,并且BaseProcessor引用了一个名为Structure的类ProjectB中。在BaseProcessor内部,有一个Structure实例作为变量。

projectB中还有一些其他类,例如定价交易等。 ProjectB 中的每个类都有一个名为 BaseStructure 的基类,即 StructurePricingTransaction类全部继承自BaseStructure。 现在在 PricingTransaction 类中,我想从 BaseStructure 类调用 BaseProcessor 类中的方法,这会导致循环依赖性。

我尝试过的是:
使用Unity,但我不知道如何让它工作,因为我尝试使用如下函数: unityContainer.ReferenceType(IBaseProcessor, BaseProcessor) 在 BaseStructure 中,那么它将需要 BaseProcessor 的引用,这也会导致循环依赖。

我还尝试创建一个IBaseProcessor接口(interface),并在这个接口(interface)中创建一个函数(我想调用的函数)声明。并让BaseProcessorBaseStructure都继承这个接口(interface)。但是,如何在不创建 BaseProcessor 实例的情况下调用 PricingTransaction 类中的函数呢?

除了使用反射之外,谁能告诉我如何解决这个问题?

任何帮助将不胜感激。谢谢:)

最佳答案

您可以使用惰性解析:

public class Pricing {
   private Lazy<BaseProcessor> proc;

   public Pricing(Lazy<BaseProcessor> proc) {
      this.proc = proc;
   }

   void Foo() {
      this.proc.Value.DoSomethin();
   }
}

请注意,您不必注册 Lazy,因为 Unity 将通过 BaseProcessor 注册来解决它。

关于vb.net - 如何解决循环依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22601981/

相关文章:

xml - 将更新的 XMLDocument 保存为字符串(vb.net 或其他 .net 语言。)

.net - 我应该始终使用 AndAlso 和 OrElse 运算符吗?

angularjs - 依赖项是否共享?

java - 如何初始化自定义 javafx Controller 的成员变量?

c# - Autofac - MVC Controller 和 Web Api Controller 的依赖注入(inject)

c# - 使用 Unity 解析 IEnumerable<T>

c# - 我可以在单层或使用的每一层中注册所有 IoC 容器组件吗?

vb.net - 使用 iTextSharp 在 VB.NET 中读取 PDF 书签

.net - 尝试运行通过反射调用的方法引发的项目未捕获异常时出错

c# - 为什么 IOC 容器被认为是一种减少耦合的方式?