基本的に私のGlobal.asax
コードには、IKernel
このような Ninject セットアップ用の次のプロパティがあります (Microsoft.Practices.ServiceLocation も利用しています)。このコンテナは、CreateKernel()
オーバーライドされたように見えると自動的に呼び出されます。
protected override IKernel CreateKernel()
{
return Container;
}
そして私のコンテナプロパティ:
static IKernel _container;
public static IKernel Container
{
get
{
if (_container == null)
{
_container = new StandardKernel();
_container.Load(new SiteModule(_container));
ServiceLocator.SetLocatorProvider(() => _container.Get<IServiceLocator>());
}
return _container;
}
}
ご覧のとおり、インターフェイス<->サービスバインディングのリストを定義するモジュールを1つだけロードしていますが、これはこの問題にとって重要ではありませんが、私の問題は-どんなに頑張っても取得できませんmy _ container
null は、MVC Web サイトを再起動したときに最初にインスタンス化されると、再び返されます。Web.config ファイルの編集と再保存 (古き良きトリック) から、アプリケーション プールのフラッシュや IIS の再起動 (!) まで、私のコンテナーはまだ存在しているようです。どうしてこうなるのか、私には本当に理解できません。初期ロード_container
が null であり、SiteModule
正しくロードされることはわかっています。
新しく作成されたサービスにいくつかの新しいバインディングを追加したいのですが、コンテナが決してnullに戻らないため、これはもちろん問題です:P
ご参考までに。ブレークポイントをコンテナーの null テストに移動しても、これがうまくいかないようです。これで問題が解決しない理由を聞かないでください。エラーはありません。すべてが正常にマップされます。
ありがとう、あなたが見る必要があると感じたらSiteModule()
私に知らせてください、そして私はこの投稿をコードで拡張することができます.