3

コンストラクタインジェクションを使って自分のプロジェクトにDIを実装しました。これでコンポジションルートはすべての解決が行われるところです(これはWebプロジェクトで行います)。解決を処理するだけの追加のプロジェクトは非常識です。IoCと「実装の詳細を隠す」

ビルドディレクトリに実装アセンブリが残っているのは、(まだプロキシプロジェクトによって参照されているためですが)Webプロジェクトレベルで参照する必要はありません。これらのインタフェースの実装は、明示的に参照されていない限り、実装されている場所以外の場所からアクセスできないことを意味します。これは、何かが間違っていることをすぐに突き止めるでしょう。

エラーが発生しやすいか、それとも合理的なのでしょうか?

+0

私は、「プロキシ」プロジェクトの目的上明確ではありませんよ。 Webアプリケーションから直接の依存関係を実装に取り​​除くこと、そして目標がプラグインモデルであるように思えます。ただし、これが当てはまる場合は、間接参照のレベルを追加するだけです。 MEFを使用して、コンパイル時に知られていない外部アセンブリから実装の構成を行うことを検討しましたか?これを行うように設計されています。 – jonsequitur

+2

関連:http://stackoverflow.com/questions/9501604/ioc-di-why-do-i-have-to-reference-all-layers-assemblies-in-entry-application/9503612#9503612 –

答えて

2

これには賛否両論があります。 BrokenGlassが言っているように、これはリトマステストです。逆に、すべてのアセンブリを配備する際には注意が必要です。インクルードされたlibの依存関係はWebアプリケーションのbinフォルダに入れられないので、最初に実行したときにこれを見逃すことはなく、解決が理想的には理想的ですが、間違っていないことを確認する必要があります。

これは実際には個人的な好みの問題です。私は簡単にWebアプリケーションに含めることができますが、それらの依存関係がWebアプリケーションに漏れないようにすることもできます。しかし、あなたのプロジェクトがあなたのコントローラがいつもあなたが必要とするものを注入するような方法で組織されていれば、起こる可能性は少なくなります。たとえば、のIContextをすべてコントローラに入れると、標準が設定されているため、あなたのアプリで(var context = new Context())を使用する可能性は低くなります。

+1

これは良いことです展開の複雑さについて指摘する。多くの人と同じように、私はあなたのDIマッピングを他のどこかでやっている "純度"を見ていますが、実際には価値がありません。 –

+0

@ミステリ​​ーそれはちょうど私がここで質問しているバランスです、 "それはそれの価値があるのですか?"問題は、「メリットは欠点を圧倒するか」 – bevacqua

+0

@Nico - あなただけがそれに答えることができます。私は個人的に価値があるとは思わない。 AdamやBrokenGlassのようには聞こえませんが(私は口に言葉を入れたくありません)。しかし、私はそれが価値があるとは思わないものをたくさん知っています。 –

2

これは全く気違いではありません。それは、依存関係が忍び込まれていないことを確認し、そのように非常に有用なリトマス試験です。これは、あなたの抽象化/インタフェースが、それらのインタフェースを実装する具象クラスとは異なるアセンブリで定義されている場合にのみ機能します。

私はいつもメインWebアプリケーションアセンブリ内に集約ルートを保持していますが、この余分なアセンブリには余分な労力が必要です。ほとんどの場合、私はあまり心配していないので、私の主な関心事は実際にテスト容易性であるからです。これは価値あるアプローチだが、プロジェクトがあるかもしれない。

0

実装が漏出しないように、ビルド後の処理を行うことができます。

乾杯 Tymek

+0

このアプローチをもう少し説明できますか? – bevacqua

関連する問題