私は一日中座っていた循環参照/依存関係にいくつかの問題があります。私の思考プロセスに何か問題があるに違いありません。
ここに私のプロジェクトがあります:
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) ASP.NET MVC Flip.Main プロジェクトで特定のコントローラー アクションを装飾するために使用するカスタム [AuthorizeSessionState] 属性があります。これは、Flip.Services プロジェクトに存在する SessionService をインスタンス化する必要がある ActionFilterAttribute です。ただし、これを Utility クラスに入れることはできません (Flip.Services は既に Flip.Utility を参照しているため)。私はそれらが Flip.Main にあるべきではないと思います-これのために別のプロジェクトを作成する必要があります!?
(あと20個)
特に、他の人は通常循環参照の問題に遭遇しないことを読んだとき、どこかで間違いを犯しているように感じます。ヘルプ?