2011-07-12 21 views
2

私たちは、Ninjectフレームワークを使用してアプリケーションにIoC/DIを実装しています。私たちは、内部のメソッドを持つ内部クラスを持っています。 IoC/DIを実装するには、インタフェースを抽出する必要があります。しかし、内部クラスに内部メソッドしか持たない場合、そのクラスのインタフェースを抽出することはできません。IoC/DI - 内部メソッドのみを持つ内部クラスの実装

このような場合(内部メソッドのみを持つ内部クラス)にはIoC/DIを実装する方法があるか、内部メソッドをパブリックメソッドに変更する必要があります。親切にお勧めします。ありがとう

答えて

0

あなたが本当に公開する必要があるのは、インターフェース(具体的な実装ではない)だけです。

抽象的なファクトリまたは(簡単な)Ninjectを使用して、パブリックインターフェイスを内部コンクリートにマップできます。したがって、クライアントコードはインタフェースを実装する "a thing"のインスタンスを要求するだけで、ファクトリ/コンテナは実装を返します。

依存関係の反転原理を読み、これと関連して読む必要があります。

2

クラスがすでに内部にある場合は、内部メソッドとパブリックメソッドの間に全く違いはありません。内部クラスのパブリックメソッドは内部的にしか見えません。

DIの利点をすべて失ってもコンクリートのクラスを注入すると、そう、はい(内部)インターフェイスを抽出し、インターフェイスを注入する必要があります。これは、構成コードが、アセンブリの同じアセンブリ内でbeeingするか、フレンドアセンブリとして宣言しなければならないかによって、クラスへのアクセスを必要とする。さらに、Ninjectをパブリッククラスを許可しないように設定する必要があります。 NinjectSettingsを参照してください。あなたはAssemblyInfo.csにInternalsVisibleTo属性を使用することができ

0

この

[assembly: InternalsVisibleTo("Assembly_That_Should_Access_The_Internal_Class")] 
のようなファイル
関連する問題