加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-4 – Can Castle Windsor可用于在ASP.NET MVC 4中实

发布时间:2020-12-15 21:00:13 所属栏目:asp.Net 来源:网络整理
导读:我阅读了 this article并看到很多人评论说不要使用Castle Windsor在ASP.NET MVC3中实现IDependencyResolver并坚持使用自定义的IControllerFactory.基本上我现在的问题是: 不要使用Castle Windsor来实现IDependencyResolver.在ASP.NET MVC 4中这仍然是正确的
我阅读了 this article并看到很多人评论说不要使用Castle Windsor在ASP.NET MVC3中实现IDependencyResolver并坚持使用自定义的IControllerFactory.基本上我现在的问题是:

>不要使用Castle Windsor来实现IDependencyResolver.在ASP.NET MVC 4中这仍然是正确的吗?
>如果是1的话.任何其他DI容器(Unity,StructureMap)都有与Castle Windsor相同的问题吗?我可以使用任何替代品吗?

非常感谢

编辑

听我说Castle Windsor不应该用来实现IDependencyResolver.我已决定使用其他一些DI容器,例如StructureMap

解决方法

MVC3和MVC4之间在IDependencyResolver方面没有区别,除了WebAPI有一个单独的解析器.

在我看来,迈克哈德洛在这个问题上有点过于苛刻,而且许多其他人都没有真正考虑过为什么而加入了这个行列.

是的,Castle Windsor确实拥有一个名为Pooled的特定对象生活方式(即终身管理对象),通常需要您在其上调用Release.在使用这种生活方式时,您可能不应该使用IDependencyResolver,因为它不提供对此Release方法的访问(尽管也有方法).

但是,我觉得在Web应用程序中使用这种生活方式通常很糟糕,您应该使用PerWebRequest生活方式,它将在Web请求结束时自动释放对象.如果这是你正在使用的,那么使用Castle Windsor的IDependencyResolver没有问题.

为什么我认为哈德洛太腐蚀?好吧,因为他的全部论点都基于此:

“这是正确的,没有’释放’方法.你可以从你的IoC容器中提供服务,但是没有办法清理它.如果我要在Suteki商店使用它,我会有一个史诗般的内存泄漏. “

然后,他继续参考KrzysztofKo?mic关于生活方式管理的文章,但忽略了参考他将在这里做的后续文章:

http://kozmic.net/2010/08/27/must-i-release-everything-when-using-windsor/

请注意他在这里说的话:

“正如我在上一篇文章中提到的那样,Windsor将跟踪你的组件,这是用户普遍存在的误解,为了正确释放所有组件,他们必须在容器上调用Release方法.”

他继续谈论其他各个方面,但总的来说,我认为大多数人都不会使用需要在Web应用程序中处理的Pooled或Transient对象.如果你这样做,那么你应该知道不要使用IDependencyResolver.否则,你应该没有问题.

我知道我可能会从别人的争论中得到很多的悲痛,但我根本不认为这是世界问题的终结,像Hadlow这样的人似乎认为它是,因为有很多选择,甚至是你需要打电话给Release.

除此之外,使用需要调用Release的生活方式意味着为开发人员提供额外的工作.您现在必须管理对象生存期并记住处置对象,否则会导致内存泄漏.在我看来,这基本上使垃圾收集的好处无效.我只使用不需要处理的东西的瞬态对象,我从不使用池化对象.

顺便说一句,我可能是错的,但我不认为任何其他容器有这个问题.这让我得出的结论是,当其他每个容器似乎都没有问题时,Windsor就会被打破,而不是MVC.温莎喜欢顽固地坚持其现实版本,所以YMMV.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读