代码之家  ›  专栏  ›  技术社区  ›  Dan

VS2008循环参考(C)

  •  2
  • Dan  · 技术社区  · 16 年前

    以下是我在VS2008解决方案中的设置:

    名为myproject.data的项目中的数据层

    名为myproject.web的项目中的Web应用程序

    myproject.web引用了myproject.data

    在myproject.web中,我使用了一个名为“mysite.utils”的类。

    我希望能够在myproject.data中使用mysite.utils,但我不能这样做,因为它会导致循环引用。

    一个不可能的解决方案是创建第三个项目并在其中移动“mysite.utils”,因为mysite.utils实际上使用myproject.data(因此需要引用它,并将创建另一个循环引用)。

    解决这个问题的最佳/最简单的方法是什么?

    6 回复  |  直到 16 年前
        1
  •  11
  •   Remy Lebeau    16 年前

    你需要把mysite.utils移到myproject.data

        2
  •  4
  •   Marc Gravell    16 年前

    最好的解决办法是简化事情…例如,实用程序代码 数据 公用设施代码,或 用户界面 实用代码。也许把它分成两个DLL,这样可以使事情简单一些。

    之后,接口是一个合理的选择,但是您可能需要一些IOC框架来提供实现。国际奥委会是解决这类问题最常用的方法。例如,您声明 ICustomerRepository 在引用程序集中;所有内容都引用那个。您的DAL 器具 接口,但是utils项目不再需要引用dal——只需要接口组件。DAL现在可以引用utils,或者它可能只知道另一个接口。 IDataUtils (当然,最好更有意义地把它分开)。这里的胶水是IOC容器,比如温莎城堡。

    最后,以及 不要这样做 ,但即使IDE不允许,也可以在.NET中创建循环引用(通过命令行工具);这是合法的,但很快就会变得非常混乱,很难修复损坏的构建。不要去那儿!!

        3
  •  2
  •   Amy B    16 年前

    通过依赖注入消除耦合。

    程序到接口。

        4
  •  2
  •   Will    16 年前

    utils不应该引用解决方案中的任何其他项目。在utils中引用另一个解决方案的任何类都应该移到它引用的解决方案中。

        5
  •  0
  •   Vilx-    16 年前

    我相信 只有 解决这个问题的方法是在一个程序集中移动所有相关功能,这样就没有循环引用。对不起的。:(

    也许可以考虑以某种方式改变架构,而不需要这样做?

        6
  •  0
  •   matt_dev    16 年前