为什么ASP.NET MVC3中的所有依赖注入发生在控制器级而不是操作级。控制器创建通常会被重写,以便在控制器实例化时注入依赖关系。但是,控制器仅作为请求动作的结果而被实例化。为什么不在动作级别处理依赖注入?为什么注入控制器而不是操作
回答
因为这是一种已知的图案和所述钩到位在MVC注入到控制器,不的动作。有一个控制器因素,但不是行动工厂。你创建了控制器的一个实例,而不是方法,这就是注入需要发生的地方。
加那里有构造器注入的已知图案,其将是更合适的这里比其他一些方法(即,动作方法)注射,它也允许在构造函数的任何其他的设置可能是必要的。
感谢您的回复。在创建控制器的实例时,为什么要注入所有方法的依赖关系? – 2012-02-08 22:01:17
喜欢什么例如?通常,控制器在其动作之间具有相关的依赖关系,例如IUnitOfWork。 ICache或与您的控制器操作相关的ISomeService – 2012-02-08 22:54:18
例如:我有一个Index()从与日志数据库绑定的readOnly存储库读取并发数据,以及一个保存到写入存储库的HttpPost索引(两个操作,每个都有独立的依赖关系)。注入仍然在控制器中,但注入的依赖关系仅与动作相关。动作调用将在HttpContext中。 – 2012-02-10 00:16:34
我的猜测是,你在上帝控制器10只依赖条件和大量的动作主演,不知道这到底是怎么变得更好?
请记住!控制器应该是瘦身并包含几个动作。我更喜欢我的控制器每个HTTP方法只有一个动作。
不,尽管我喜欢参考GOD代码,因为它令我感到愉快。 “每个HTTP方法” - 我假设你的意思是HttpPost和HttpGet和/或CRUD。我只是好奇,是否有一种方法可以避免将多个依赖关系(如存储库)注入控制器,而这些依赖关系很可能永远都不会同时需要。几乎没有什么行动的皮包骨头的控制器是好的,我尽量不要破坏200-300行代码,但不要让你的控制器太小,否则你将会过度,并且服务的可用性会受到影响。 – 2012-02-08 22:08:33
您可以使用模型绑定作为各种操作方法注入器。这里有一个小介绍模型活页夹,你可以阅读:
http://www.singingeels.com/Articles/Model_Binders_in_ASPNET_MVC.aspx
你可以实例,并通过信息库,或任何你想在这样的操作方法,并且它会是可重复使用的。
- 1. 为什么T4MVC为控制器操作引入虚拟?
- 2. CakePHP的 - HTML的“链接 - 为什么使用控制器=>和行动=>而不只是控制器/操作
- 3. 为什么路线和控制器是类而不是对象?
- 4. AngularJS - 为什么控制器不工作?
- 5. 使用控制器作为语法而不是$ scope的优点是什么?
- 6. 为什么这个控制器的操作结果为空?
- 7. android-控制IME显示搜索操作而不是输入
- 8. Yii解析url作为控制器/操作而不是执行底层脚本
- 9. 将struts2操作结果映射到控制器而不是jsp
- 10. 为什么我无法注入角度控制器?
- 11. Angular JS:为什么module.config注入和控制器注入之间的区别?
- 12. Rails中新控制器操作的目的是什么?
- 13. 以下控制器操作括号内的参数是什么?
- 14. 什么是存储库,服务和操作/控制器?
- 15. Grails,SSL和控制器操作,当前建议是什么
- 16. 为什么此控制器测试创建操作失败?
- 17. Symfony2 |为什么控制器操作执行两次
- 18. 为什么我的门票控制器创建操作失败?
- 19. T4MVC为什么试图从Html.ActionLink运行控制器操作?
- 20. 为什么我的控制器/操作未响应:put?
- 21. @注入控制器
- 22. 控制器的工作是什么?
- 23. 为什么printf不在控制台上打印“操作员”?
- 24. 为什么Http获取操作被调用而不是Http post操作?
- 25. ConsoleTraceListener为什么不写入控制台?
- 26. AspectJ - 为什么使用注释而不是ajc编译器?
- 27. 为什么在android canvas中绘制操作使用float而不是int(x,y)?
- 28. 在Rails 5的控制器中使用什么而不是after_commit?
- 29. 为什么导入javax.swing。*而不是java.swing。*
- 30. 什么时候Zend_Controller_Request_Http不是控制器
你会如何在动作中注入依赖关系? – Nope 2012-02-08 21:29:38