私たちのチームは、システムの「API」として構築されて強く定義されたアプリケーションサービス層を有するDDDアプリを構築してきました。ドメインとインフラストラクチャからすべてのものを集めて一般的なタスクを実行します。入力/出力としてDTOだけを使用するので、ドメインはこのレイヤーを超えて公開されません。UIからIOCコンテナの設定を抽象化する必要がありますか?
今、私たちは、ミックスに依存性注入コンテナを追加したいと我々はいくつかの厳しい選択に直面しています。アプリケーションサービスを使用して作業を行う2つのクライアントアプリケーションMVC 2アプリとWindowsサービスアプリがあります。従来、依存性注入作業を行うためのすべての設定コードは、mvcプロジェクトのglobal.asaxファイルに格納されています。問題は、IOC登録コードがWindowsサービスで複製され、そのプラットフォーム用にわずかに変更されてしまうことです。
私が持っている問題は、DIを登録するにはどのようなドメインおよびインフラストラクチャ層への参照を持っているか、また、クライアントアプリを必要としているかを知るために、クライアントアプリを必要とすることです。アプリサービス層を持つアイデアの全体は、クライアントが知っていて話すべき唯一のものだということでした。私の提案された解決策は、クライアントが一度呼ぶだろうし、それが必要なものを知っているので、それはDIコンテナを設定するだろうと私のアプリサービス層で「依存関係サービス」を作成することでした。また、クライアントアプリケーションが独自の依存関係を登録できるようにするメソッドもあります。たとえば、MVCプロジェクトはコントローラファクトリを登録し、Windowsサービスはそのスタートアップクラスを登録します。私はこれが珍しいのか、私がこの考え方で間違った道を歩んでいるのかを知りたかったのです。他の誰かが前にこの問題を遭遇しましたか?
どのようにWeb固有のタイプを登録しますか? IoCConfiguratorは、さまざまな可能性のある実行環境について知り、すべての環境に縛られる必要はありませんか? Webホストの下のコンテナにMVCコントローラを登録する必要がある場合は、おそらくそれらをサービスプロセスホストに登録(またはアセンブリのデプロイ)する必要もありません。 –
それは私のプロジェクトのどの部分がそれに関わっているかによって異なります。私のDomainModelプロジェクトでIoCが必要な場合は、このプロジェクトのこの特別な依存関係のためのIoCConfiguratorを作成します。 WebUI MVCプロジェクトでIoCが必要な場合は、このプロジェクトのIoCConfiguratorも作成します。私はプロジェクトをできるだけ疎結合させようとしています。たとえば、WebServiceプロジェクトでDomainModelアセンブリが必要な場合は、手動でIoC設定を処理しません。私は、このアセンブリの特定の依存関係のためのコンフィギュレータがあると仮定します。モジュール化のために+1 – Mariusz