Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
vs2008循环参考(c#)_C#_Asp.net_Visual Studio 2008 - Fatal编程技术网

vs2008循环参考(c#)

vs2008循环参考(c#),c#,asp.net,visual-studio-2008,C#,Asp.net,Visual Studio 2008,以下是我在vs2008解决方案中的设置: 名为MyProject.Data的项目中的数据层 名为MyProject.Web的项目中的Web应用程序 Web引用了MyProject.Data 在MyProject.Web中,我使用了一个名为“MySite.Utils”的类 我希望能够在MyProject.Data中使用MySite.Utils,但我不能,因为这会导致循环引用 一个不可能的解决方案是创建第三个项目并将“MySite.Utils”移动到其中,因为MySite.Utils实际上使用MyP

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

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

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

Web引用了MyProject.Data

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

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

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


修复此问题的最佳/最简单方法是什么?

您需要将MySite.Utils移动到MyProject.Data,从声音上看

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


也许可以考虑以某种方式更改架构,使其不再需要?

最好的解决方案是简化一些事情……例如,是实用程序代码数据实用程序代码或ui实用程序代码。也许可以将其拆分为两个DLL;这可能会使事情变得更简单

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


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

听起来您可以从中受益(并享受!)从阅读这个


通过依赖注入消除耦合


程序到接口。

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

Whoah…那是一个很大的大脑屁…抱歉:-p至少他可以从链接中受益…doh!抱歉,那是我的错误。我编辑了我的pos我不想把事情弄清楚吗?为什么投反对票?被接受的答案和我说的不一样吗?我想修改你的答案,说“一”字。