0
我使用Ninject 2.0與MVC 2/EF 4項目爲了注入我的存儲庫到我的控制器。我讀過,當做這樣的事情時,應該使用InRequestScope()綁定。當我這樣做時,我會爲每個請求獲取一個新的存儲庫,但舊存儲庫不會被丟棄。由於舊的存儲庫保留在內存中,因此與同時存在的多個ObjectContexts發生衝突。Ninject 2.0 InRequestScope()導致我的問題 - 依賴沒有被處置
我的具體信息庫實現IDisposable:
public class HGGameRepository : IGameRepository, IDisposable
{
// ...
public void Dispose()
{
if (this._siteDB != null)
{
this._siteDB.Dispose();
}
}
}
而且我Ninject代碼:
public class NinjectControllerFactory : DefaultControllerFactory
{
private IKernel kernel = new StandardKernel(new HandiGamerServices());
protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext, Type controllerType)
{
try
{
if (controllerType == null)
{
return base.GetControllerInstance(requestContext, controllerType);
// return null;
}
}
catch (HttpException ex)
{
if (ex.GetHttpCode() == 404)
{
IController errorController = kernel.Get<ErrorController>();
((ErrorController)errorController).InvokeHttp404(requestContext.HttpContext);
return errorController;
}
else
{
throw ex;
}
}
return (IController)kernel.Get(controllerType);
}
private class HandiGamerServices : NinjectModule
{
public override void Load()
{
Bind<HGEntities>().ToSelf().InRequestScope();
Bind<IArticleRepository>().To<HGArticleRepository>().InRequestScope();
Bind<IGameRepository>().To<HGGameRepository>().InRequestScope();
Bind<INewsRepository>().To<HGNewsRepository>().InRequestScope();
Bind<ErrorController>().ToSelf().InRequestScope();
}
}
}
我在做什麼錯?
有沒有你不使用[官方Ninject MVC擴展]一個原因(http://www.ninject.org/extensions.html )? –
它工作瓦特/ MVC 2? –
[是](https://github.com/ninject/ninject.web.mvc/wiki)。 –