私は、WindowsアプリケーションプロジェクトでStructureMapを使い始めています。基本の学習に取り組んで、私は同じ目標を達成するために私のソリューションを手配する2つの方法を見つけました。そして、私はこれらの2つのうちの1つがより良いオプションのように思えると誰かがコメントできるかどうか、なぜですか?StructureMapを使用すると、これらのプロジェクト組織のうちの1つが他の組織より優れていますか?
ここでの目標は、IOCを使用して2つのサービスを依存関係なく使用できるようにすることでした。そこで私は自分のビジネスレイヤーにインターフェイスを作成し、インフラストラクチャプロジェクトでこれらのインターフェイスを実装し、その時点で実際のサービスをラップしました。
私はこれを最初に試してみましたが、流暢なインターフェイスを使って構造マップを初期化するコードを持つDependencyResolverプロジェクトを作成しました(IServiceAが必要なときにServiceXのインスタンスを与えます)。 DependencyResolverの初期化が私のアプリからキックオフする必要があるので、私はこのようなアプリからDependencyResolverへの参照があります。
をそれでは、私はDependencyResolverに私の参照を削除し、頼ることができることを見出しましたStructureMapスキャナと命名規則は、実行時にその参照を取得するには、それでは私のセットアップは次のようになります。それでは
、私がダウンして、私が使っていたサービスに、さらなる命名規則を取って、でしたできるDependencyResolverを一括して削除します。この時点で、私は全くのStructureMapスキャナに頼ると、正しく物事の設定を取得するために命名規則います:
Soがここで私は、これらの3つの選択肢についてどのように感じるべきかについてはっきりしていません。オプション1は、UIをそのまま間接的に参照するべきではないことを除いて、(直接)StructureMapの使用のために参照する必要があります。しかし、私はこのが本当にであるかどうか分からない。
オプション2は、DependencyResolverへの参照の必要性をなくし、そのプロジェクトのクラスにアクセスするための命名規則に依存していますが、残りのすべての設定を高いレベルで制御できます(ただし、私のアプリケーションから直接structureMapへの依存)。
オプション3は最も簡単です(名前はすべて特定の方法で、アセンブリをスキャンします)が、エラーが発生しやすく、脆いようです。特に、私はIServiceAbc => ServiceAbcよりも少し複雑なことをしたいと思っていました。
だから、このようなことを経験したことがある人なら、助けてもらえますか?
私のアプリケーションから私のサービスへの間接参照を避けるべきでしょうか?あれば、そうすることの本当のメリットは何ですか? 名前付け規則ですべてをやろうとしているのは、単純なプロジェクトでは賢明なことですか?
私がここでやろうとしていることを行うための標準的なパターンはありますか?
..
私はそれをアプリケーションに入れておけば、私のアプリはプロジェクトのすべてのアセンブリを参照する必要があります(それらのアセンブリにアクセスするために使用されたすべてのコードがインタフェースを介して行われたとしても)コンテナ。それは理想よりも少なく見えないのですか?多分それは問題ではないかもしれませんが、アプリとドメイン/ビジネス層に第三者サービスへの参照がないようにする方が良いようです。 – chrismay
そのため、ドメインモデルを別のアセンブリに配置する必要があります。 –
このアーキテクチャの分離は、より精巧にする必要があります –