Я связываю объект класса DonorContext (который происходит из DbContext из EntityFramework), как показано ниже в Global.ascx, как показано ниже.Устранение связанного объекта в Ninject
kernel.Bind<DonorContext>().ToSelf().InRequestScope().OnDeactivation(DisposeDonorContext);
Я ожидал, что в конце запроса Ninject вызовет метод DisposeDonorContext. Но его никогда не называют.
Что я могу собрать из Интернета, так это то, что объекты IDisposible types будут автоматически получать свой метод Dispose, когда они выходят из области видимости. Это не происходит в моем случае, и поэтому я пытался использовать OnDeactivation() для размещения DonorContext (чего не бывает).
Любые идеи о том, почему распоряжения не происходит?
Дарин, На самом деле я вставляю объект Service Layer UserManager в свой контроллер. Этот объект UserManager содержит зависимость от DonorContext. Я использую атрибут [Inject] для ввода зависимостей. UserManager имеет область видимости по умолчанию ninject. Я уверен, что объект DonorContext создается и вводится на моем уровне обслуживания, поскольку я использую его для загрузки данных, которые происходят правильно. – Jatin
Дарин, я только что установил пакет Ninject.MVC3, и теперь я вижу метод OnDeactivation(), вызывающий мой метод. Спасибо за вашу помощь. – Jatin
+1 и все верно и правильно, но просто хотел сделать это явным, что это интеграция System.Web в Ninject, воплощенная в Ninject.MVC3, которая подключает это к тому, чтобы это было так - захват всей обработки в Ninject является GC-триггером Механизм кэширования и сбора данных, который в зависимости от вашего контекста хоста может вызвать наблюдаемые проблемы OP. Деактивация не происходит непосредственно в соответствующем месте цикла обработки ASP.NET –