簡體   English   中英

vs2008循環引用(c#)

[英]vs2008 circular references (c#)

這是我在vs2008解決方案中的設置:

名為MyProject.Data的項目中的數據層

名為MyProject.Web的項目中的Web應用程序

MyProject.Web引用了MyProject.Data

在MyProject.Web中,我有一個名為“MySite.Utils”的類

我希望能夠在MyProject.Data中使用MySite.Utils,但我不能,因為它會導致循環引用。

一個不可能的解決方案是創建第三個項目並在其中移動“MySite.Utils”,因為MySite.Utils實際上使用MyProject.Data(因此它需要引用它並且將創建另一個循環引用)

解決這個問題的最佳/最簡單方法是什么?

您需要通過聲音將MySite.Utils移動到MyProject.Data

最好的解決方法是簡化操作......例如,實用程序代碼數據實用程序代碼或ui實用程序代碼。 也許把它分成2個dll; 這可能會使事情變得更簡單。

之后,接口是一個合理的選擇,但您可能需要一些IoC框架來提供實現。 IoC是解決此類問題的最常用方法。 例如,您在引用程序ICustomerRepository聲明ICustomerRepository ; 一切都參考了。 您的DAL 實現了接口,但utils項目不再需要引用DAL - 只是接口程序集。 您的DAL現在可以引用utils - 或者它可能只知道另一個接口IDataUtils (當然更好地將它拆分更有意義)。 這里的粘合劑是IoC容器,例如Castle Windsor。

最后, 不要這樣做 ,但即使IDE不允許你,也可以在.NET中創建循環引用(通過命令行工具); 它是合法的,但它很快就變得非常混亂,並且很難修復破壞的構建。 不要去那里!!

用依賴注入擊敗耦合。

編程到界面。

MySite.Utils不應該引用解決方案中的任何其他項目。 任何引用Utils中另一個解決方案的類都應該移到它引用的解決方案中。

我認為解決這個問題的唯一方法是在一個程序集中移動所有相互關聯的功能,以便沒有循環引用。 抱歉。 :(

或許考慮以某種方式改變架構,這不是必需的?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM