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)。 –