Asp.net MVC也接触好久了,但由于自己一直主要负责后台,尤其是数据库方面的工作对于该框架并没有一个很好的了解,尤其是蒋金楠大师的ASP.NET MVC4框架剖析一书都买了2年多了,真正认真看过并实践过的也就第一章而已。最开始的时候还老认为这本书不好,又厚又晦涩,不容易坚持读完,现在回想起来都觉得羞愧。标准的徒弟不好怪师傅的心态,当然学习的确需要一个过程,从浅入深会越来越喜欢。到目前为止,我最喜欢的书籍系列依然是入门经典系列,内容简单有习题,方便记忆与实践。最近有一段学习JAVA的过程,让我慢慢开始学着阅读源码,这才知道蒋大师是源码级别的剖析,并且比很多相关书籍好的地方时,基本上每一个复杂的知识点他都会根据自己的理解创建一个相对简单的小例子促进读者的理解,真心是棒棒哒。闲扯了半天,进入今天的正题—ASP.NET MVC与IOC的相关实践。

首先由于IOC是在Controller这章介绍,所以先来说说Controller方面的相关知识。ASP.NET MVC框架的主要的处理过程就是通过解析URL信息获取Controller的名称和Action的名称,同时通过Model的绑定机制将请求上下文所包含的请求数据转化为Action方法调用的参数列表。这儿想提及的一点就是关于Controller的执行是同步的还是异步的,实际上默认情况下是异步的,其中DisableAsyncSupport属性负责控制,默认为false,我之前为这块也困惑了很久。接下来提及的是ControllerFactory类中的SessionStateBehavior属性,有Default、Required、ReadOnly、Disable,到目前为止,我对于该框架中的会话仍然不是特别的清楚,之后弄清后回过来修改。

接下来用简图表示Controller激活的基本过程,请求到来后,HttpModule进行拦截,通过MvcRouteHandler调用GetHttpHandler方法找到对应HttpHandler处理类,即MvcHandler。然后调用该类的异步处理方法,注意这儿会始终使用异步处理方式,该方法中首先通过ControllerBuilder对象获取当前的ControllerFactory,然后通过控制器的名称找到并创建该控制器,让后调用[Begin]Execute执行,可以异步也可以是同步执行,之前有提及。Controller在执行完后,ControllerFactory会调用Release将其释放。

再则说说Controller类型的缓存,为了提高解析Controller的效率,框架对其进行了缓存,是一种XML文件形式的缓存,可以%Windir%\Micrisoft.NET的相关子目录中找到,与AreaRegistration的缓存方式类似,需要时将该XML文件反序列化为一个List<Type>对象即可。

最后介绍,本文的重点Controller中IOC的应用。在此之前,需要介绍一下应用IOC的原因,在实际的开发过程中,用户的请求会直接发送到Controller,这是如果是针对某项业务功能的调用,Controller会直接调用Model(也可以是外部的Service),当需要呈现数据时,回见Model中获得数据转化为ViewModel的形式用于呈现。但不管怎样,Controller都会与业务层的Model(领域模型)产生直接的依赖,不复合程序设计中依赖倒置的原则,因此引入IOC,降低耦合性。

在IOC的应用上,我们选择框架默认的DependencyResolver组件与Unity组件的组合,当前Unity组件已从codeplex搬到了github。有一个UnityMvc包原生支持IOC都不需要代码,直接配置即可,但由于版本兼容原因,附实现的代码如下,相关内容比较简单,就不介绍了。这儿的重点是相关整合方案有很多,这种是被使用最多的,当然蒋老师介绍的与Ninject的组合也很好。

 View Code

参考:

[1]蒋金楠. ASP.NET MVC4框架揭秘[M]. 上海:电子工业出版社, 2012. 86-122

转载于:https://www.cnblogs.com/zhangyubao/p/7008745.html

快速入门系列--MVC--03控制器和IOC应用相关推荐

  1. 【Python零基础快速入门系列 | 03】AI数据容器底层核心之Python列表

    • 这是机器未来的第7篇文章 原文首发地址:https://blog.csdn.net/RobotFutures/article/details/124957520 <Python零基础快速入门 ...

  2. 【物体检测快速入门系列 | 03】Windows部署Docker GPU深度学习开发环境

    这是机器未来的第3篇文章 原文首发链接:https://blog.csdn.net/RobotFutures/article/details/124815912 1. 概述 在<物体检测快速入门 ...

  3. 【物体检测快速入门系列 | 01 】基于Tensorflow2.x Object Detection API构建自定义物体检测器

    这是机器未来的第1篇文章 原文首发地址:https://blog.csdn.net/RobotFutures/article/details/124745966 CSDN话题挑战赛第1期 活动详情地址 ...

  4. 【Python零基础快速入门系列 | 07】浪漫的数据容器:成双成对之字典

    这是机器未来的第11篇文章 原文首发链接:https://blog.csdn.net/RobotFutures/article/details/125038890 <Python零基础快速入门系 ...

  5. 【安全利器SELinux快速入门系列 | 02】SELinux 策略实施的可视化操作指南

    这是机器未来的第40篇文章 原文首发地址:https://blog.csdn.net/RobotFutures/article/details/126117336 SELinux 策略实施的可视化操作 ...

  6. 【Python数据科学快速入门系列 | 06】Matplotlib数据可视化基础入门(一)

    这是机器未来的第52篇文章 原文首发地址:https://robotsfutures.blog.csdn.net/article/details/126899226 <Python数据科学快速入 ...

  7. 【安全利器SELinux快速入门系列 | 01】SELinux基础入门

    这是机器未来的第35篇文章 原文首发地址:https://blog.csdn.net/RobotFutures/article/details/125914553 文章目录 1. 研究目标 2. se ...

  8. c# wpf listbox 高度_WPF快速入门系列(1)——WPF布局概览

    一.引言 关于WPF早在一年前就已经看过<深入浅出WPF>这本书,当时看完之后由于没有做笔记,以至于我现在又重新捡起来并记录下学习的过程,本系列将是一个WPF快速入门系列,主要介绍WPF中 ...

  9. WPF快速入门系列(6)——WPF资源和样式

    WPF快速入门系列(6)--WPF资源和样式 一.引言 WPF资源系统可以用来保存一些公有对象和样式,从而实现重用这些对象和样式的作用.而WPF样式是重用元素的格式的重要手段,可以理解样式就如CSS一 ...

  10. python r转义_Python快速入门系列之二:还学不会我直播跪搓衣板

    Python作为一个,目前最火的编程语言之一,已经渗透到了各行各业.它易学好懂,拥有着丰富的库,功能齐全.人生苦短,就用Python. 这个快速入门系列分为六篇,包含了Python大部分基础知识,每篇 ...

最新文章

  1. 一文运维zookeeper
  2. 汇编quad_汇编语言中的英文缩写
  3. EasyRE 寒假逆向生涯(5/100)
  4. 2018.12.12
  5. 美征信巨头Equifax因Struts漏洞导致数据大规模泄露
  6. 医疗器械软件网络安全法规和标准概述(附所有标准)
  7. linux(centos)中的cron计划任务配置方法
  8. yum update Transaction Check Error
  9. java同样作用的方法_Java的接口用途和方法
  10. android 技能标签功能_android专业技能总结.doc
  11. 【算法导论第13章】红黑树
  12. agile java_《Agile Java》阅读笔记
  13. Spring整合CXF发布及调用WebService
  14. android singleInstance 和 singleTask 的区别
  15. 在c语言中作为字符串结束标志是什么,字符串的结束标志是什么?
  16. 数据分析学习总结笔记06:T检验的原理和步骤
  17. python做波士顿房价预测
  18. PHOTOSHOP超强磨皮大法 将斑点选出来
  19. 思维导图软件freemind的使用教程
  20. SQL优化(面试题)

热门文章

  1. 我国将于今年春季发射空间站核心舱 空间站进入全面实施阶段
  2. 日本“女机器人”畅销全球,有三个地方最吸引人,网友:想拥有
  3. Java中的occur_time,PLSQL报错: ORA-12170:TNS connect timeout occurred
  4. ubuntu java sdk_ubuntu 10.10安装java sdk6过程
  5. djc加密数字货币_中国银行原副行长: quot;网络加密币quot;难以成为货币,央行数字货币只能是法定货币的数字化...
  6. android下拉刷新动画效果代码_vue项目实录:下拉刷新组件的开发及slot的使用
  7. 002_Container布局容器
  8. 007_logback配置
  9. html 中如何写js代码提示错误,javascript怎么进行错误处理?
  10. appium适用场景