1

最近依存性注入の使用を開始し、Ninject 2 (今のところ) を IoC コンテナーとして選択しました。DI の原則を組み込むためにソリューションをリファクタリングしているときに、少し気になることがあり、それを回避する簡単な方法があるかどうか疑問に思っています。

データ層には、同じジェネリック クラス (EntityMapper) を継承する多数のデータ アクセス クラスがあります。以前は、必要に応じてこれらのクラスの新しいインスタンスを作成していましたが、実際にはすべてシングルトンに変更できました。Ninject を使用してデータ アクセス オブジェクトをインスタンス化するように ObjectDataSource をオーバーライドしたので、EntityMapper クラスの 1 つを指す ObjectDataSource を作成するときはいつでも、Ninject はデフォルトの自己バインディング戦略を使用して必要な依存関係を注入します。これらのクラスは非常に多いため、EntityMapper クラスごとに明示的なバインディングを作成する必要はなく、それらのすべてに特別な属性を設定する必要もありません。でも、EntityMapper の任意のインスタンスをシングルトン クラスにするように Ninject に指示できるようにしたいと考えています。このようなもの:

Bind(t => typeof(IEntityMapper).IsAssignableFrom(t)).InSingletonScope();

これを行う方法はありますか?

4

1 に答える 1

1

コンベンション拡張機能を使用して、次のことを行うことができます

var kernel = new StandardKernel();
kernel.Scan( x=>
             {
                 x.FromAssemblyContaining<MyEntityMapper>();
                 x.FromCallingAssembly();
                 x.WhereTypeInheritsFrom<IEntityMapper>();
                 x.InSingletonScope();
             } );
于 2010-04-21T19:03:31.937 に答える