我有一對夫婦與循環引用/依賴,我已經坐在了一整天的問題。我的思考過程中一定是錯的,我只是不明白。解決循環引用(C#)
這裏是我的項目:
Flip.Main (ASP.NET MVC)
Flip.Domain (C# DLL)
Flip.Services (C# DLL)
Flip.Utility (C# DLL)
基準電流/依賴性:
Flip.Main -> Flip.Domain, Flip.Services, Flip.Utility
Flip.Services -> Flip.Domain, Flip.Utility
Flip.Domain -> Flip.Utility
我要組織我的項目,我的服務項目有所有服務的方式,我的領域的項目模型,資料庫和'流利'擴展來查詢模型,主要和實用工程幾乎是自我解釋。遇到
問題:
1)我有我的Flip.Services項目,該項目需要派出本地化電子郵件的EmailService。所有本地化都在Flip.Main的App_GlobalResources中完成。不知道如何將強類型電子郵件和其他本地化資源現在加入到我的服務層,因爲Flip.Main已經取決於服務層,因此我可以依賴於主項目。
2)我有業務類,例如CustomerSearchFilter表示一個強類型的搜索查詢。我希望Flip.Domain項目之外的業務類,因爲它們不屬於域模型的一部分。然而,在我的CustomerSearchFilter類中,我有域類實例(例如CustomerGroup),因此它需要知道域類。同時,我的Flip.Domain項目中的Fluent界面需要知道CustomerSearchFilter是什麼,所以我可以將它應用到我的IQueryable接口。再循環參考。
3)我有一個自定義[AuthorizeSessionState]屬性,我用我的ASP.NET MVC Flip.Main項目來裝飾特定的控制器動作。這是一個ActionFilterAttribute,它需要實例化駐留在我的Flip.Services項目中的SessionService。我不能把它放到我的Utility類中(因爲Flip.Services已經引用了Flip.Utility)。我不認爲他們應該在Flip.Main - 我必須爲此做另一個項目!?
(20以上)
我覺得我犯了一個錯誤的地方的路線,尤其是當我看到別人通常不會遇到循環引用的問題。幫幫我?
這就是我要爲第2項提出的建議。如果您覺得兩個兄弟組件需要知道對方的類,只需分開一個接口並讓它們都使用它們即可。 – 2009-08-24 06:36:59
您可以考慮的一件事是使用基本類型與虛擬成員而不是接口。通過這種方式,您可以爲主機應用程序提供功能性的默認實現,這可以使測試變得更簡單,並與實現共享一些邏輯。 – mcintyre321 2013-06-27 10:41:26