私は一日中座っていた循環参照/依存関係にいくつかの問題があります。私の思考プロセスに何かが間違っていなければならない、私はそれを得ない。 円の参照を解決する(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がすでにサービスレイヤーに依存しているので、厳密に型付けされた電子メールや他のローカライズされたリソースを私のサービスレイヤーにどうやって取得するのか分かりません。したがって、Mainプロジェクトに依存することができます。
2)ビジネスクラスがあります。厳密に型指定された検索クエリを表すCustomerSearchFilter。 Flip.Domainプロジェクトの外にあるビジネスクラスは、ドメインモデルの一部ではないため、このクラスを必要とします。しかし、CustomerSearchFilterクラスでは、ドメインクラスに関するインスタンス(CustomerGroupなど)があるため、ドメインクラスについて知る必要があります。同時に、Flip.DomainプロジェクトのFluentインターフェイスは、CustomerSearchFilterが何であるかを知る必要があるため、IQueryableインターフェイスに適用することができます。循環参照。
3)ASP.NET MVC Flip.Mainプロジェクトで特定のコントローラアクションをデコレートするカスタム[AuthorizeSessionState]属性があります。これは、私のFlip.Servicesプロジェクトにある私のSessionServiceをインスタンス化する必要があるActionFilterAttributeです。私はこれを私のUtilityクラスに入れることはできません(Flip.Servicesは既にFlip.Utilityを参照しているためです)。私は彼らがFlip.Mainのいずれかにあるべきだとは思わない - 私はこれのために別のプロジェクトを作らなければならないのですか?私は他の人が通常、循環参照の問題が発生していないことを読んで、特に
(20以上)
私はラインの下のどこかでミスを作っているように私は感じて、。助けて?
これは、私が項目2のために提案しようとしていたものです。2つの兄弟アセンブリが互いにクラスを知っている必要があると感じたら、インタフェースを分割して、それらを両方使うようにしてください。 –
あなたが考慮できる1つのことは、インターフェイスの代わりに仮想メンバーを持つ基本タイプを使用することです。このようにして、ホストアプリケーションに機能的なデフォルト実装を提供することができます。これにより、テストが容易になり、実装といくつかのロジックを共有できます。 – mcintyre321