I can't seem to get Ninject to dispose objects in request scope in an ASP.NET MVC application with web API no matter what I do.
What I am doing:
I add a the following class to my application:
public class SomeDisposable : IDisposable { public void Dispose() { System.Diagnostics.Debug.WriteLine("test"); } }
I add the following binding in NinjectWebCommon RegisterServices method
kernel.Bind().ToSelf().InRequestScope();
I add an object of the type SomeDisposable to the Home controller
public HomeController(SomeDisposable some) { }
I run the application and place a breakpoint in the HomeController constructor and the Dispose method of the SomeDisposable class. The controller receives an object (presumably from Ninject), the page loads but the Dispose method is never called.
At this point things are already broken but I add a Web API controller, install Ninject.WebApi packaged and repeat the experiment with the WebAPI controller and I get the same result.
I have read a bunch of questions including this one - Ninject doesn't call Dispose on objects when out of scope and the Ninject documentation https://github.com/ninject/Ninject.Web.Common/wiki/InRequestScope and they both indicate that due to the fact that Ninject.Web.Common includes a registration for the OnePerRequestHttpModule (yes it is there) the disposal should just work but it doesn't. I also tried adding the PerRequest module in the web.config and got an error saying that I can't have this section in integrated mode.
At this point I am lost. I suspect either integrated mode or OWIN have something to do with this but I have no idea how to debug it or what to do to fix it. Any suggestions?
The object not being disposed was a problem in Ninject.Web.Common
before version 3.2.2, as discussed here: InRequestScope is failing to dispose objects
As you have been installing Ninject via nuget, you probably installed the oldest supported dependencies. This can be avoided by using:
Install-Packages Ninject.MVC5 -DependencyVersion Highest
Please verify that you are using the current version of all Ninject packages.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With