大家看到上面的代码了,Application_Start大家都知道这是应用程序启动入口。

AreaRegistration.RegisterAllAreas是什么呢?

我们先看看微软官方的注解:

我们明白这个含义了,接下来需要完全了解这个含义,我们看看下面代码

public class FlowManageAreaRegistration : AreaRegistration
{
public override string AreaName
{
get
{
return "FlowManage";
}
} public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"FlowManage_default",
"FlowManage/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
);
}
}

是不是感觉像路由表呀,它继承了AreaRegistration 类,重写了RegisterArea注册区域的方法,重写了区域的名称AreaName;

MapRoute我就不说了,这就是表映射。我们看看它的具体实现

看红色标注部分,该控制器位于FlowManager之下,因此路由表才有了"FlowManage/{controller}/{action}/{id}"这样的配置,这样配置区域的控制器就完成了。

接下来,我们看看FilterConfig.RegisterGlobalFilters,这个就是配置了过滤器,或者说FilterConfig被应用程序调用了。其他2个就不说了。

ModelBinders.Binders.Add(typeof(JObject), new JobjectModelBinder());这个是什么呢,

先说说JobjectModelBinder,然后我们看看下面的方法,首先该类继承了IModelBinder,IModelBinder是一个接口,

该接口中定义了BindModel方法,那么下面的方法来源就有了,它是为了实现这个接口的方法的。我们看看这个方法的参数

controllerContext和bindingContext 2个对象一个是控制器上下文,一个是数据模型绑定上下文,我们可以从controllerContext对象中获取到请求信息,

下面方法里面做的事件是什么呢,当然就是绑定了。把请求信息绑定到JObject,JObject顾名思义就是JSONObject,

public class JobjectModelBinder :IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
//todo:需要判断前端是否是FormData
var obj = new JObject();
var request = controllerContext.HttpContext.Request;
foreach (var key in request.Form.AllKeys)
{
obj[key] = request.Form[key];
}
return obj;
} }

说了这么多,现在我们知道,我们定义了一个类,实现了接口,绑定了请求到JObject对象,目前网上没有调用的描述,我这里稍微提一下:

JobjectModelBinder通过这个对象,调用方法后返回JObject对象

看你怎么用了。

现在我们看看这个:

再看看里面写了什么

public static  class AutofacExt
{
private static IContainer _container; public static void InitAutofac()
{
var builder = new ContainerBuilder(); //注册数据库基础操作和工作单元
builder.RegisterGeneric(typeof(BaseRepository<>)).As(typeof(IRepository<>));
builder.RegisterType(typeof (UnitWork)).As(typeof (IUnitWork)); //注册WebConfig中的配置
builder.RegisterModule(new ConfigurationSettingsReader("autofac")); //注册app层
builder.RegisterAssemblyTypes(Assembly.GetAssembly(typeof (UserManagerApp))); //注册领域服务
builder.RegisterAssemblyTypes(Assembly.GetAssembly(typeof(AuthoriseService)))
.Where(u =>u.Namespace== "OpenAuth.Domain.Service"); // Register your MVC controllers.
builder.RegisterControllers(typeof(MvcApplication).Assembly); // OPTIONAL: Register model binders that require DI.
builder.RegisterModelBinders(Assembly.GetExecutingAssembly());
builder.RegisterModelBinderProvider(); // OPTIONAL: Register web abstractions like HttpContextBase.
builder.RegisterModule<AutofacWebTypesModule>(); // OPTIONAL: Enable property injection in view pages.
builder.RegisterSource(new ViewRegistrationSource()); // OPTIONAL: Enable property injection into action filters.
builder.RegisterFilterProvider(); // Set the dependency resolver to be Autofac.
_container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(_container));
} /// <summary>
/// 从容器中获取对象
/// </summary>
/// <typeparam name="T"></typeparam>
public static T GetFromFac<T>()
{
return _container.Resolve<T>();
// return (T)DependencyResolver.Current.GetService(typeof(T));
}
}

这个里面的我自己还没看懂,看懂再补充

上面的内容经过MSDN论坛以及博客园各位指点终于找到说明的含义了

AutofacExt使用了ioc容器AutoFac解耦。有关AutoFac可以查看AutoFac详细介绍
												

MVC之Global.asax解析的更多相关文章

  1. MVC中 global.asax

    MVC框架下 global.asax 页面的事件 这些事件被触发的 顺序是: Application_BeginRequest Application_AuthenticateRequest Appl ...

  2. nopCommerce 3.9 大波浪系列 之 global.asax

    一.nop的global.asax文件 nop3.9基于ASP.NET MVC 5框架开发,而ASP.NET MVC中global.asax文件包含全局应用程序事件的事件处理程序,它响应应用程序级别和 ...

  3. 在ASP.Net MVC 中,如何在Global.asax中配置一个指向Area内部的默认Route

    ASP.Net MVC 中配置Route的时候可以设置一个默认的Route. 比如我要在输入http://localhost的时候默认进入http://localhost/home/index.可以在 ...

  4. ASP.NET MVC中注册Global.asax的Application_Error事件处理全局异常

    在ASP.NET MVC中,通过应用程序生命周期中的Application_Error事件可以捕获到网站引发的所有未处理异常.本文作为学习笔记,记录了使用Global.asax文件的Applicati ...

  5. MVC.Net:通过Global.asax捕捉错误

    在MVC.Net中,如果我们想做一个统一的错误处理的模块,有几个选择,一种是通过一个Base Controller来实现,另外一种就是在Global.asax中实现.这里介绍后一种方法. 首先打开Gl ...

  6. ASP.NET MVC中的Global.asax文件

    1.global.asax文件概述 global.asax这个文件包含全局应用程序事件的事件处理程序.它响应应用程序级别和会话级别事件的代码. 运行时, Global.asax 将被编译成一个动态生成 ...

  7. Asp.net MVC Global.asax文件

    global.asax文件概述 global.asax这个文件包含全局应用程序事件的事件处理程序.它响应应用程序级别和会话级别事件的代码. 运行时, Global.asax 将被编译成一个动态生成的 ...

  8. asp.net mvc global.asax文件详解

    一.文件概述 global.asax这个文件包含全局应用程序事件的事件处理程序.它响应应用程序级别和会话级别事件的代码. 运行时, Global.asax 将被编译成一个动态生成的 .NET Fram ...

  9. 一起学习MVC(2)Global.asax的学习

    在Global.asax.cs文件中        protected void Application_BeginRequest(Object sender, EventArgs e)  {     ...

随机推荐

  1. Linux下配置镜像源

    清华大学地址: https://mirrors.tuna.tsinghua.edu.cn 选择对应ubuntu的版本 在linux下用终端敲 cd /etc/apt/source.list 把里面的内 ...

  2. php中heredoc的使用方法

    Heredoc技术,在正规的PHP文档中和技术书籍中一般没有详细讲述,只是提到了这是一种Perl风格的字符串输出技术.但是现在的一些论坛程序,和部分文章系统,都巧妙的使用heredoc技术,来部分的实 ...

  3. Bootstrap FileInput 多图上传插件 文档属性说明

    Bootstrap FileInput 多图上传插件   原文链接:http://blog.csdn.net/misterwho/article/details/72886248?utm_source ...

  4. linux nat网络配置

    1. 2 . 3. BOOTPROTO = static ONBOOT=yes  #开启自动启用网络连接 IPADDR0=192.168.21.128  #设置IP地址 PREFIXO0=24  #设 ...

  5. WordPress“无法将上传的文件移动至wp-content/uploads/”的解决办法

    WordPress“无法将上传的文件移动至wp-content/uploads/”的问题在有些配置不完善的虚拟主机或服务器中会碰到,一般会出现以下症状:1.无论是从文章编辑页面还是媒体库页面都无法上传 ...

  6. emacs设置了单例模式后无法设定文件关联解决办法

    emacs设置单例模式的本质就是使用下列参数启动: C:\emacs-24.5\bin\emacsclientw.exe --no-wait --alternate-editor="C:\e ...

  7. jersey HTTP Status 400 - Bad Request

    原因是jersey 内置的转换器,只能做简单的类型转换如: 首先客户端提交上来的一定是String; String ----> String/Long/Boolean 这些基本的 可以转换,但是 ...

  8. 安装mysql-python报错解决办法

    报错: 按照网上的办法,安装mysql-connector-c-6.1.10-winx64.msi和MySQL-python-1.2.3.win-amd64-py2.7 .exe都不行,又源码安装My ...

  9. C#连接mariadb代码及方式

    不负责任的说MariaDb和MySQL很多都是通用的,因为来自同一个爹... 和MySQL连接方式差不多 首先配置好你的MariaDb,创建test数据库,在test里创建MyTable表,脚本如下( ...

  10. jsonrpc.js -- 原生js实现 JSON-RPC 协议

    很早以前就涉及到多端远程调用 api的设计,那时候自己设计了个消息传递回调过程.最近了解了JSON-RPC协议,更正规,就可以自己实现下.逻辑也不复杂,没有限制底层消息传递的方式,可以应用到更多的场景 ...