大家看到上面的代码了,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. aarch64_g5

    gtkmm24-devel-2.24.5-2.fc26.aarch64.rpm 2017-02-11 18:17 620K fedora Mirroring Project gtkmm24-docs- ...

  2. Python操作Excle

    python操作excel主要用到xlrd和xlwt这两个库,即xlrd是读excel,xlwt是写excel的库.可从这里下载https://pypi.python.org/pypi.下面分别记录p ...

  3. 数据结构之线性表(python版)

    数据结构之线性表(python版) 单链表 1.1  定义表节点 # 定义表节点 class LNode(): def __init__(self,elem,next = None): self.el ...

  4. java基础25 线程的常用方法、线程安全问题、死锁现象

    一.线程的常用方法 1.Thread(String name):初始化线程的名字2. setName(String name):设置线程的名字3. getName():返回线程的名字4. sleep( ...

  5. const 和 #define区别_fenglovel_新浪博客

    const 和 #define区别 (2012-12-11 14:14:07) 转载▼ 标签: 杂谈   (1) 编译器处理方式不同 define宏是在预处理阶段展开. const常量是编译运行阶段使 ...

  6. django model常用字段类型

    摘自 http://www.cnblogs.com/wt869054461/p/4014271.html V=models.AutoField(**options) #int:在Django代码内是自 ...

  7. DDD领域模型企业级系统(一)

    领域模型的基本构造块: 1.实体(Entity):有业务生命周期,使用标识进行跟踪. 2.值对象(Value Object):无业务生命周期,用来描述实体. 3.服务(Service):无状态的行为类 ...

  8. centos7.3 chrome 安装

    /etc/yum.repos.d/目录下新建文件google-chrome.repo,向其中添加如下内容: [google-chrome] name=google-chrome baseurl=htt ...

  9. ajax传递的参数服务器端接受不到的原因

    最常见的就是组织的json数据格式有问题,尝试把单引号改为双引号试试,如下: $datares = {"uname":$uname.val(),"phone": ...

  10. .NET异步多线程,Thread,ThreadPool,Task,Parallel,异常处理,线程取消

    今天记录一下异步多线程的进阶历史,以及简单的使用方法 主要还是以Task,Parallel为主,毕竟用的比较多的现在就是这些了,再往前去的,除非是老项目,不然真的应该是挺少了,大概有个概念,就当了解一 ...