在同一个 class 库中对注入的循环依赖

Circular dependency on injection within same class library

我在同一个 class 库中有以下 classes 和实现

public interface IA
    {

    }

    public class A : IA
    {
        private IB _ib;

        public A(IB ib)
        {
            _ib = ib;
        }
    }

    public interface IB
    {

    }

    public class B : IB
    {
        private IA _ia;

        public B(IA ia)
        {
            ia = _ia;
        }
    }

我的问题是,IA 或 IB 何时被实例化,在执行依赖注入时是否会创建任何循环依赖?如果是,如何解决?

简短的回答是,是的,这将是一个问题。

有解决方案,这些解决方案取决于所使用的 DI container/solution。

即使你解决了这个问题,也强烈表明你的设计不理想,应该修改。

在大多数情况下,您应该能够轻松提取 A 和 B 所依赖的第三个接口。

您的代码将具有循环依赖性,并会在运行时抛出异常。您需要重构代码,使 AB 不相互依赖。您需要从 A 或 B 中提取一个新接口 (IC),并将您的代码重构为如下所示:

public interface IA {
}
public class A : IA {
  IC _c;
  public A(IC c) {
    _c = c;
  }
}

public interface IB {
}
public class B : IB {
  IA _a;
  IC _c;
  public B(IA a, IC c) {
    _a = a;
    _c = c;
  }
}

public interface IC {
}
public class C : IC {
}

请参阅 Circular Dependency in constructors and Dependency Injection 了解如何重构您的 类 以删除循环引用