【问题标题】:Risk of cross-reference交叉引用的风险
【发布时间】:2018-12-20 01:17:52
【问题描述】:

我创建了一个名为“A”的类,并引用了“B”类 同时,我创建了一个名为“B”的类,并引用了“A”类

我做了两个如下的类

class A
{
   private readonly B _b;
   A(B b)
   {
      _b = b;
   }
}

class B
{
   private readonly A _a;
   B(A a)
   {
      _a = a;
   }
}

但是 NInjection 不允许我做出这样的模式。

所以,我想知道为什么不允许交叉引用。

谢谢。

【问题讨论】:

  • 如果你只能用 B 构造 A 并且只能用 A 构造 B,你打算如何开始构造 A 或 B?
  • 如果您对引用类型、接口等不太熟悉,我认为您不应该使用 IoC 容器。人。您到底想在这里实现什么目标?
  • 这称为循环依赖。 ninject 中不允许。可以使用属性注入。

标签: c# cross-reference


【解决方案1】:

你可以使用属性注入来绕过循环依赖:

class A
{
   public B _b {get; set;}
   public void OtherMethod() {}
}

class B
{
   B(A a)
   {
      a._b = this;
   }
}

【讨论】:

    【解决方案2】:

    @Gauravsa 提出的解决方案的问题如下:如果我有一个 B 类的实例,并且想知道 A 类的哪个实例引用了它,我没有办法找到它。这就是为什么它被称为“交叉引用”,而不是“引用”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-29
      • 1970-01-01
      • 1970-01-01
      • 2011-08-15
      • 2011-03-03
      • 2013-11-11
      相关资源
      最近更新 更多