大佬教程收集整理的这篇文章主要介绍了entity-framework-4 – 当超出范围时,Ninject不调用对对象的Dispose,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
这里是我想要处置的对象:
接口:
public interface IDataContext : IDisposable { MessengerEntities context { get; set; } }@H_775_2@messengerEntities是Entity Framework的ObjectContext的实现 – 我的上下文对象。
然后我创建一个具体的类如下:
public class DataContext : IDataContext { private MessengerEntities _context = new MessengerEntities(); public MessengerEntities context { get { return _context; } set { _context = value; } } #region IDisposable Members public void Dispose() { context.Dispose(); } #endregion }
然后我有一个Ninject控制器工厂这样(这是建模在史蒂夫·桑德森MVC 2书):
public class NinjectControllerFactory : DefaultControllerFactory { // a Ninject "kernel" is the thing that can supply object instances private IKernel kernel = new StandardKernel(new Messengerservices()); // ASP.NET MVC calls this to get the controller for each request protected override IController GetControllerInstance(requestContext requestContext,Type controllerTypE) { if (controllerType == null) return null; return (IController)kernel.Get(controllerTypE); } private class Messengerservices : NinjectModule { public override void Load() { Bind<IDataContext>().To<DataContext>().InrequestScope(); Bind<IArchivesRepository>().To<ArchivesRepository>().InrequestScope(); Bind<ImessagesRepository>().To<messagesRepository>().InrequestScope(); } } }
现在,当我在一个断点处调用context.Dispose()在DataContext对象中运行调试器时,该代码永远不会被执行。
所以,证据表明Ninject不处理对象,当他们走出范围,但只是创建新的对象,并依靠垃圾收集器,以摆脱他们在选择的时间。
我的问题是:我应该关心这个吗?因为我 – 我会认为Ninject将处置任何实现IDisposable的对象。
更新:我下载了Ninject Mvc扩展(对于MVC 3),这是现在我如何做MvcApplication和绑定,它似乎是处置我的上下文对象。
在global.asax:
public class MvcApplication : NinjecthttpApplication { public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new HandleErrorAttribute()); } public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resourcE}.axd/{*pathInfo}"); routes.MapRoute( "Default",// Route name "{Controller}/{action}/{iD}",// URL with parameters new { controller = "Home",action = "Index",id = UrlParameter.optional } // Parameter defaults ); } protected override Ninject.IKernel CreateKernel() { var kernel = new StandardKernel(); kernel.Load(Assembly.GetExecuTingAssembly()); return kernel; } protected override void OnApplicationStarted() { base.onApplicationStarted(); AreaRegistration.RegisterAllAreas(); RegisterGlobalFilters(GlobalFilters.Filters); RegisterRoutes(RouteTable.Routes); } }
和
public class EFBindingModule : NinjectModule { public override void Load() { Bind<IDataContext>().To<DataContext>().InrequestScope(); Bind<IArchivesRepository>().To<ArchivesRepository>().InrequestScope(); Bind<ImessagesRepository>().To<messagesRepository>().InrequestScope(); } }
一切都保持不变。
以上是大佬教程为你收集整理的entity-framework-4 – 当超出范围时,Ninject不调用对对象的Dispose全部内容,希望文章能够帮你解决entity-framework-4 – 当超出范围时,Ninject不调用对对象的Dispose所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。