В основном в моем коде Global.asax
У меня есть следующее свойство IKernel
для настройки Ninject, подобное этому (также пользуясь преимуществами Microsoft.Practices.ServiceLocation). Этот контейнер автоматически вызывается на один раз, кажется, на CreateKernel()
переопределение:Каков наилучший способ сбросить контейнер IKernel Ninject в приложении MVC?
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
null, когда он был первоначально создан при перезагрузке моего веб-сайта MVC , Из редактирования и повторного сохранения файла Web.config (старый старый трюк), чтобы смыть пул приложений или даже перезапустить IIS (!), Мой контейнер , по-видимому, все еще существует. Я действительно не понимаю, как это может быть. Я знаю, что на моих начальных нагрузках _container
имеет значение null, а SiteModule
действительно загружается.
Это проблема, конечно, потому что теперь я хотел бы добавить некоторые новые привязки для вновь созданных служб и контейнер никогда не возвращается к нулевой: P
FYI. Даже перемещение моей точки останова в тестовый тест контейнера не похоже на это, не спрашивайте меня, как это не исправляет проблему, но я знаю, что внутри этого должно быть действительно, потому что при начальной загрузке есть нет ошибок, все отлично складывается.
Спасибо, ребята, если вы чувствуете, что вам нужно увидеть SiteModule()
, дайте мне знать, и я могу продлить этот пост кодом.
Ну, как я уже сказал, я попытался перезапустить IIS, я не пытался перезапустить весь сервер =) – GONeale