web-dev-qa-db-ja.com

Ninject:作成済みのインスタンスをNinjectに登録していますか?

既に作成されているクラスのインスタンスをNinjectに登録して、インジェクションが必要になるたびにこのインスタンスを使用できるかどうか、誰か教えてもらえますか?

シングルトンと呼べると思いますが、インスタンスはすでに作成されています。すべてのドキュメントは、クラスの新しいインスタンスの作成を示しています。

49
Martin

既存のインスタンスを取得してシングルトンとして登録するToConstantメソッドを使用できます。

var kernel = new StandardKernel();
kernel.Bind<MyClass>().ToConstant(myClassInstance);

より複雑なものにしたい場合は、ToMethod(Funcを使用してインスタンスを取得できる)をInSingletonScopeと組み合わせて使用​​できます。

var kernel = new StandardKernel();
kernel.Bind<MyClass>().ToMethod(context => myClassInstance).InSingletonScope();
69
nemesv