【问题标题】:vs2008 circular references (c#)vs2008循环引用(c#)
【发布时间】:2009-01-16 16:39:14
【问题描述】:

这是我在 vs2008 解决方案中的设置:

名为 MyProject.Data 的项目中的数据层

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

MyProject.Web 有对 MyProject.Data 的引用

在 MyProject.Web 中,我使用了一个名为“MySite.Utils”的类

我希望能够在 MyProject.Data 中使用 MySite.Utils,但我不能,因为它会导致循环引用。

一个不可能的解决方案是创建第三个项目并将“MySite.Utils”移动到那里,因为 MySite.Utils 实际上使用了 MyProject.Data(因此它需要引用它并且会创建另一个循环引用)

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

【问题讨论】:

    标签: c# asp.net visual-studio-2008


    【解决方案1】:

    您需要通过声音将 MySite.Utils 移动到 MyProject.Data

    【讨论】:

      【解决方案2】:

      最好的解决办法是简化事情...例如,是实用程序代码 data 实用程序代码,或 ui 实用程序代码。也许将其拆分为 2 个 dll;这可能会使事情变得更简单。

      之后,接口是一个合理的选择,但您可能需要一些 IoC 框架来提供实现。 IoC 是解决此类问题的最常见方法。例如,您在引用程序集中声明您的ICustomerRepository;一切都引用了这一点。您的 DAL 实现接口,但 utils 项目不再需要引用 DAL - 只需接口程序集。您的 DAL 现在可以引用实用程序 - 或者它可能只知道另一个接口 IDataUtils (当然,最好将它更有意义地拆分)。这里的粘合剂是 IoC 容器,例如 Castle Windsor。

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

      【讨论】:

        【解决方案3】:

        用依赖注入打败耦合。

        编程到接口。

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            【解决方案5】:

            我相信解决此问题的唯一方法是将所有相互关联的功能移动到一个程序集中,以便没有循环引用。对不起。 :(

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

            【讨论】:

            • WTF?为什么投反对票?接受的答案不是和我说的一样吗?
            • 我会将您的答案修改为“一种”方式。
            【解决方案6】:

            听起来您可以从阅读本文中受益(并享受!)...

            http://www.amazon.com/Framework-Design-Guidelines-Conventions-Development/dp/0321246756

            【讨论】:

            • 哇...那是一个大脑袋放屁...对不起 :-P 至少他可以从链接中受益...doh!
            • 对不起,这是我的错。我编辑了我的帖子,试图让事情更清楚
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-02-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-08-28
            • 1970-01-01
            相关资源
            最近更新 更多