В основном в моем коде 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;
}
}
Как вы видите, я загружаю просто один модуль, определяющий список привязок моего интерфейса <->, что, однако, не должно быть важно для этой проблемы, но моя проблема в том, что, как бы я ни старался, Я не могу получить свой _ container
ноль снова, как только он был первоначально создан при перезапуске моего веб-сайта MVC. От контейнера и повторного сохранения файла Web.config (старый добрый прием) до очистки пула приложений или даже перезапуска IIS (!) Мой контейнер , по-видимому, все еще существует. Я действительно не понимаю, как это может быть. Я знаю, что при моих начальных загрузках _container
равно нулю, а SiteModule
загружается правильно.
Конечно, это проблема, потому что теперь я хочу добавить несколько новых привязок для вновь создаваемых служб, и контейнер никогда не вернется к нулю: P
FYI. Даже перемещение моей точки останова в нулевой тест контейнера, похоже, не дает такого результата, не спрашивайте меня, как это не решает проблему, но я знаю, что внутри, если должно быть допустимым, потому что при начальной загрузке есть ошибок нет, все отображается нормально.
Спасибо, ребята, если вы считаете, что вам нужно увидеть SiteModule()
, дайте мне знать, и я могу дополнить этот пост кодом.