を呼び出す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を試してみてください。