7

以前にも同様の質問があったことがわかりますが、DI と .Net をまったく使用していないため、ソリューション全体を把握できないか、適切なソースが見つからない可能性があります....

  • アセンブリ WebAPI、BL、DL があります。
  • WebAPI は BL に依存しており、
  • BLはDLに依存し、
  • WebAPI は DL を参照しません。同じままにしておきたいと思います。いくつかのアセンブリがありますが、問題を説明するにはこれで十分です。

WebAPI にはアプリケーション開始セクションがあるため、これを使用して Ninject カーネルを初期化し、WebAPI プロジェクトの依存関係を登録できます。

BL やその他のアセンブリで同じことを達成するにはどうすればよいですか?

4

2 に答える 2

3

いくつかの異なる方法があります。Ninject 規則を使用して、すべてISomethingを同じ名前の実装に自動的に解決することができます (例: IThing-> Thing)。または、依存関係を登録する各アセンブリにNinject モジュールを作成することもできます ( BL は DL にモジュールをロードできます)。

使用するアプローチは、オブジェクトごとに異なるスコープを定義する必要があるかどうかによって異なります。たとえば、使用するメソッドに影響を与える可能性があるものをシングルトンとして解決したい場合などです。

于 2012-10-25T22:13:21.210 に答える
0

これに関するMarkSeemannのアドバイスは素晴らしいと思います。つまり、アプリケーションの可能な限り最高のレイヤーでコンポジションをルートにします。Webアプリの場合、これはGlobals.asaxファイルを意味します。私はこれの正当な理由について説明することができましたが、リンクされたブログ投稿はより良い仕事をします。

これはあなたが達成しようとしている階層化を壊しますが、ほんのわずかであり、私が考えることは適切な方法です。Webレイヤーが適切に薄い場合(つまり、かなり簡単に厚いクライアントに置き換えることができる場合)、大きな損失にはなりません。これに本当に反対の場合は、DLのBLにコンポジションルートを作成できます。

于 2013-01-23T14:22:51.780 に答える