vs2008循环引用(c#)

时间:2009-01-16 16:39:15

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

这是我在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 个答案:

答案 0 :(得分:11)

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

答案 1 :(得分:4)

最好的解决方法是简化操作......例如,实用程序代码是数据实用程序代码,还是 ui 实用程序代码。也许把它分成2个dll;这可能会使事情变得更简单。

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

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

答案 2 :(得分:2)

用依赖注入击败耦合。

编程到界面。

答案 3 :(得分:2)

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

答案 4 :(得分:0)

我认为解决这个问题的 ONLY 方法是在一个程序集中移动所有相互关联的功能,以便没有循环引用。抱歉。 :(

或许考虑以某种方式改变架构,这不是必需的?

答案 5 :(得分:0)