Should controller lifestyle always be transient in Windsor configuration for ASP.NET MVC?

感情迁移 提交于 2021-02-18 12:22:31

问题


I ran into a problem where I had an Html.DropDownList in my view that would postback the selected value the first time I submitted the form, but each subsequent postback would only post data from the initial postback. So I added lifestyle="transient" to the component element where I had configured my controller for castle windsor, which fixed the problem, but of course made postbacks take longer since a new controller was being instantiated per request. Given the information above, what insight, suggestions, or solutions might help determine my original question about the controller lifestyle? Thanks for all the help and support!


回答1:


MVC controllers are transient. Thinking about it, this makes sense for a few reasons. First, if a single instance is used to service multiple requests and if multiple requests happen to hit the same controller at the same time, you're going to experience some fairly bizarre race conditions. Second, HTTP is by its very nature stateless, and requests exist independently of one another. This is reflected in the transient lifestyle of controllers.




回答2:


Transient, yes, but for interest sake, why not PerWebRequest instead of Transient? I've seen a couple of blogs that use PerWebRequest lifestyle and I can't think of a reason why not. Any answers?




回答3:


I agree with Dion. Landed here looking for solution to this same question. It seems like PerWebRequest is more appropriate.

Depending on how you integrate your container into MVC and WebApi, you might not be instructing Windsor to release dependencies when your controller isn't being used anymore.

If you set it to PerWebRequest, it will automatically release your controller, and all its dependencies when the request ends



来源:https://stackoverflow.com/questions/1792283/should-controller-lifestyle-always-be-transient-in-windsor-configuration-for-asp

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!