【问题标题】:MVC 5 Could this result in an infinite loop?MVC 5 这会导致无限循环吗?
【发布时间】:2015-05-20 16:43:59
【问题描述】:

我正在编写一个 MVC 5 互联网应用程序,并且对潜在的编码缺陷有疑问。

我有一个 AccountService 类,它有一个在构造函数调用中初始化的 MapLocationMarkerService 对象。 MapLocationMarkerService 有一个构造函数参数,即AccountService

当我创建一个AccountService 对象时,我在初始化MapLocationMarkerService 对象时传入了当前的AccountService 对象。

这会导致无限循环吗?

【问题讨论】:

  • 使用依赖注入,是的,这会导致堆栈溢出。您应该定义不同的层以避免这种情况。
  • 一个代码示例会使这更清楚,但据我了解,您创建一个AccountService,然后创建一个MapLocationMarkerService,其中包含对父AccountService 的引用。由于MapLocationMarkerService 从未尝试实例化新的AccountService,因此我看不到哪里会发生无限循环。

标签: c# object constructor asp.net-mvc-5


【解决方案1】:

没有:

public class A
{
  public B b;

  public A()
  {
    b = new B(this);
  }
}

public class B
{
  public A a;

  public B(A _a)
  {
    a = _a;
  }
}

【讨论】:

    【解决方案2】:

    这称为循环引用。这可能表明服务没有正确解耦。您可以将其中的一些方法重构为另一个服务类以删除循环引用。

    This 文章可以帮助您理解和解决问题。

    【讨论】:

      猜你喜欢
      • 2016-05-01
      • 2013-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多