Fork me on GitHub

ABP源码分析三十四:ABP.Web.Mvc

ABP.Web.Mvc模块主要完成两个任务:

第一,通过自定义的AbpController抽象基类封装ABP核心模块中的功能,以便利的方式提供给我们创建controller使用。

第二,一些常见的基础功能的实现。

 

AbpController:这是一个抽象基类,继承自MVC Controller,是ABP系统中所有controller的基类。如下图中,其封装了ABP核心模块中提供的大多数的功能。同时实现了一些公共的方法。它有三个派生类:AbpAppViewController,AbpScriptsController,AbpLocalizationController。

 

AbpWebViewPage<TModel> ,AbpWebViewPage:继承自MVC的WebViewPage。他们是ABP系统中所有view的基类。实现了一些通用逻辑:比如本地化。

 

ControllerConventionalRegistrar:继承自IConventionalDependencyRegister,register 所有controller的派生类。

 

AbpWebMvcModule:继承自AbpModule,完成Abp.Web.MVC模块的初始化。初始化主要干两件事:

第一件事,Register Assembly by convention,这是所有模块都要在初始化执行的动作。

第二件事,使用自定义的的WindsorControllerFactory替换MVC默认的DefaultControllerFactory,以实现Controller的依赖注入。

 

WindsorControllerFactory: 继承自DefaultControllerFactory,重写了ReleaseController和GetControllerInstance方法来管理Controller对象。

 

ErrorViewModel:封装了ErrorInfo和Exception类型的属性。

 

MvcAjaxResponse<TResult>,MvcAjaxResponse:用于封装针对ajax requests的Response信息。继承自AjaxResponse<TResult>,添加了一个TargetUrl属性,没有重写基类中的方法。

 

AbpMvcAuthorizeAttribute:实现IAbpAuthorizeAttribute接口,继承Mvc的AuthorizeAttribute,并重写AuthorizeCore方法。 提供permissions的设置。

 

 

 

 

AbpLocalizationController:继承自AbpController,添加了ChangeCulture方法用于更改语言设置。并将语言设置保存在Cookie中。

AbpAppViewController:继承自AbpController,根据viewUrl返回一个view.

AbpScriptsController:继承自AbpController,添加了GetScripts方法返回一段javascript代码,该代码中的相应的JS对象包含当前访问用户的所有Permission信息,Navigation信息,session信息,setting信息,当前MultiTenancy的配置信息,当前访问用户的Tenant的所有Feature信息。

 

ActionDescriptorHelper:返回ActionDescriptor的methodInfo

AbpJsonResult:继承自Newtonsoft的JsonResult。配置将CLR对象序列化为CamelCase的json 对象。

 

EmbeddedResourceRouteHandler : 实现了MVC的IRouteHandler的GetHttpHandler方法。 返回自定义的IHttpHandler对象EmbeddedResourceHttpHandler

EmbeddedResourceHttpHandler:实现了MVC的IHttpHandler的ProcessRequest方法。根据RouteData中pathInfo指定的文件路径,返回对应的文件。

WebResourceHelper:为嵌入型的资源文件请求创建路由规则,和指定其RouteHandler为EmbeddedResourceRouteHandler。嵌入型的资源文件是指嵌入到assembly中的JS和Css资源.

 

HtmlHelperResourceExtensions: 扩展了HtmlHelper类,添加了IncludeScript和IncludeStyle方法。这连个方法如下。有何用?主要用于防止客户端读取其缓存在本地的Js和Css文件,而这些文件在server端又存在更新的版本。

 

 

实际项目中的用法如下:

 

返回ABP源码分析系列文章目录

posted @ 2016-04-20 14:05 ZHK的博客 阅读(...) 评论(...) 编辑 收藏