基本上在我的Global.asax
代码中,我有以下IKernel
用于 Ninject 设置的属性(也利用了 Microsoft.Practices.ServiceLocation)。一旦它出现在CreateKernel()
覆盖上,就会自动调用这个 Container:
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;
}
}
如您所见,我正在加载一个模块,该模块定义了我的接口<->服务绑定列表,但这对这个问题并不重要,但我的问题是 - 无论我看起来多么努力,我都无法得到当我重新启动 MVC 网站时,我的 _ container
null 再次被初始化。从编辑和重新保存 Web.config 文件(旧技巧)到刷新应用程序池甚至重新启动 IIS(!),我的容器显然仍然存在。我真的不明白这是怎么回事。我知道我的初始加载_container
为空并且SiteModule
加载正确。
这当然是一个问题,因为我现在希望为新创建的服务添加一些新绑定,并且容器永远不会返回 null :P
供参考。即使将我的断点移动到容器空测试中似乎也没有解决这个问题,不要问我这不能解决问题,但我知道 if 应该是有效的,因为在初始加载时有没有错误,一切都很好。
谢谢大家,如果您觉得需要查看,请SiteModule()
告诉我,我可以使用代码扩展这篇文章。