1

初めて Ninject を使用しようとしていますが、使用方法がわかりません。インジェクション (コンストラクターまたはメソッド) を使用していないとしましょう。自由に使用できますか?

var kernel = new StandardKernel();
var types = kernel.GetBindings(typeof(IDomainEventHandler<T>))
.GetImplementingTypes();

または、カーネルにアクセスする特定の方法はありますか? 新しいカーネルを作成するのはいつnew StandardKernel()ですか?それとも単なるラッパー クラスですか?

4

1 に答える 1

1

を呼び出すnew StandardKernel()と、常に の新しいインスタンスが作成されますStandardKernel。シングルトンの場合、コンストラクターは公開されません。

Ninject をサービス ロケーターとして使用する場合 (どれだけお勧めしないかは関係ありません)、そのインスタンスを依存コードに渡す必要があります。または、単にpublic staticプロパティとして公開し、アプリの起動時などに初期化します。

このMicrosoft.Practices.ServiceLocation.ServiceLocatorように使用することもできます:

登録

IKernel kernel = new StandardKernel();
IServiceLocator ninjectServiceLocator = new NinjectServiceLocator(kernel);
Microsoft.Practices.ServiceLocation.ServiceLocator.SetLocatorProvider(() => ninjectServiceLocator);

使用法

var service = ServiceLocator.Current.GetInstance<IMyService>();

または、ASP Web アプリケーションでは、次のようにアクセスできます。

var kernel = ((NinjectHttpApplication) HttpContext.ApplicationInstance).Kernel;
var service = kernel.Get<IService>();

しかし、私が言ったように。これらのアプローチは一般的に推奨されません。Ninject は、このように使用することを意図していません。コンストラクタインジェクションでDIを試してみてください。

于 2013-02-21T23:31:35.180 に答える