本篇级别: 中高级篇,假设各位知道Abp是什么, Abp里面的基本的概念及用法(想了解基本概念的可在这里学习: http://www.cnblogs.com/mienreal/p/4358806.html

AbpWebApplication

AbpWebApplication是需要我们的Global.cs里面的HttpApplication继承他, 初始化分两个阶段

构造方法AbpWebApplication()

在这个方法里面,做了非常重要但是很简单的事, 通过 AbpBootstrapper类库,间接实例化了IocManager.Instance, 并且注册了IocManager,IIlocManager,IIocRegistrar, IIocResolver做了注册,

也就是这一步完成之后,IocManager.Instance.Reslove只能解析上面的四个类型, 其他类型到目前为止,还一个都没有注册.

 

Application_Start(object sender, EventArgs e)方法

a. 注册了IAssemblyFinder, 关联到了WebAssemblyFinder类库, 猜主要是用来寻找相关类库, 看其代码主要是获取当前bin目录下的所有dll组件,并跟当前已加载的 Assembly做比较,最后返回当前程序已加载的dll, 忽略未加载的.

b. AbpBootstrapper初始化,

b.1 IocManager.IocContainer.Install(new AbpCoreInstaller());
Component.For<IUnitOfWorkDefaultOptions, UnitOfWorkDefaultOptions>().ImplementedBy<UnitOfWorkDefaultOptions>().LifestyleSingleton(),
Component.For<INavigationConfiguration, NavigationConfiguration>().ImplementedBy<NavigationConfiguration>().LifestyleSingleton(),
Component.For<ILocalizationConfiguration, LocalizationConfiguration>().ImplementedBy<LocalizationConfiguration>().LifestyleSingleton(),
Component.For<IAuthorizationConfiguration, AuthorizationConfiguration>().ImplementedBy<AuthorizationConfiguration>().LifestyleSingleton(),
Component.For<IFeatureConfiguration, FeatureConfiguration>().ImplementedBy<FeatureConfiguration>().LifestyleSingleton(),
Component.For<ISettingsConfiguration, SettingsConfiguration>().ImplementedBy<SettingsConfiguration>().LifestyleSingleton(),
Component.For<IModuleConfigurations, ModuleConfigurations>().ImplementedBy<ModuleConfigurations>().LifestyleSingleton(),
Component.For<IEventBusConfiguration, EventBusConfiguration>().ImplementedBy<EventBusConfiguration>().LifestyleSingleton(),
Component.For<IMultiTenancyConfig, MultiTenancyConfig>().ImplementedBy<MultiTenancyConfig>().LifestyleSingleton(),
Component.For<ICachingConfiguration, CachingConfiguration>().ImplementedBy<CachingConfiguration>().LifestyleSingleton(),
Component.For<IAuditingConfiguration, AuditingConfiguration>().ImplementedBy<AuditingConfiguration>().LifestyleSingleton(),
Component.For<IAbpStartupConfiguration, AbpStartupConfiguration>().ImplementedBy<AbpStartupConfiguration>().LifestyleSingleton(),
Component.For<ITypeFinder>().ImplementedBy<TypeFinder>().LifestyleSingleton(),
Component.For<IModuleFinder>().ImplementedBy<DefaultModuleFinder>().LifestyleTransient(),
Component.For<IAbpModuleManager>().ImplementedBy<AbpModuleManager>().LifestyleSingleton(),
Component.For<ILocalizationManager, LocalizationManager>().ImplementedBy<LocalizationManager>().LifestyleSingleton()

上面注册的大部分都是配置类,最后四个有TypeFinder,ModuleFinder,ModuleManager, LocalizationManager.

Navigation: 导航相关,不晓得干啥

LocalizationConfiguration, LocalizationManager, 多语言相关,这个基本根据实际情况看。

Authorization: 授权相关, 跟Authentication有区别,前者授权,后者负责的呢登录认证

Feature: 不晓得干啥

Settings: 看起来是设置相关的

ModuleConfiguration:  Abp模块配置,这个看起来应该很重要,毕竟是搞Module么,这个可是Abp的核心概念

EventBus: 事件总线,看程序规模跟复杂度了,不过是很好玩的概念

MultiTenancy: 多租户概念,也看业务逻辑跟系统应用场景了.

Caching: 缓存,必须得搞清楚的概念

Auditing: 审计,这个设计的还是不错,有很好的参考价值, 但是也有一些弊端,需要综合考虑,感觉利大于弊。

AbpStartup: 管Abp启动阶段的事,上述列的里面,这个是最先用到的,也是最先不用管的:)

TypeFinder: 类型查找的,

ModuleFinder, ModuleManager: 跟上面的ModuleConfiguration一样,都是Module管理相关的

b.2 IocManager.Resolve<AbpStartupConfiguration>().Initialize();
Localization = IocManager.Resolve<ILocalizationConfiguration>();
Modules = IocManager.Resolve<IModuleConfigurations>();
Features = IocManager.Resolve<IFeatureConfiguration>();
Navigation = IocManager.Resolve<INavigationConfiguration>();
Authorization = IocManager.Resolve<IAuthorizationConfiguration>();
Settings = IocManager.Resolve<ISettingsConfiguration>();
UnitOfWork = IocManager.Resolve<IUnitOfWorkDefaultOptions>();
EventBus = IocManager.Resolve<IEventBusConfiguration>();
MultiTenancy = IocManager.Resolve<IMultiTenancyConfig>();
Auditing = IocManager.Resolve<IAuditingConfiguration>();
Caching = IocManager.Resolve<ICachingConfiguration>();

一共11项Configuration, 只是在b.2的介绍里面增加了UnitOfWork的Configuration

UnitOfWork: 工作单元, 这个概念现在很普遍,大家都应该了解.

b.3 _moduleManager.InitializeModules();
public virtual void InitializeModules()
{
LoadAll(); var sortedModules = _modules.GetSortedModuleListByDependency(); sortedModules.ForEach(module => module.Instance.PreInitialize());
sortedModules.ForEach(module => module.Instance.Initialize());
sortedModules.ForEach(module => module.Instance.PostInitialize());
}

1. 加载所有Module

2. 按照DepondsOnAttribute对各个Module排序

3. 一次按照PreInit, Init,PostInit的顺序一次执行.

 

Application_End(object sender, EventArgs e)方法

Module Shutdown

var sortedModules = _modules.GetSortedModuleListByDependency();
sortedModules.Reverse();
sortedModules.ForEach(sm => sm.Instance.Shutdown());

这部分很简单,就是通过各个Module的Shutdown释放各个Module的资源

Abp Application级别的生命周期的更多相关文章

  1. ASP.NET整理:Cookie,Application,Session,页面生命周期

    一.设置Cookie的2种方式 1.    Repsonse.Cookie[“名”] = 值; 2.    HttpCookie hcCookie = new HttpCookie(“名”,值); h ...

  2. Servlet学习笔记(1)--第一个servlet&&三种状态对象(cookie,session,application)&&Servlet的生命周期

    servlet的404错误困扰了两天,各种方法都试过了,翻书逛论坛终于把问题解决了,写此博客来纪念自己的第一个servlet经历. 下面我会将自己的编写第一个servlet的详细过程提供给初学者,大神 ...

  3. 【spring mvc】application context的生命周期

    上一次讲application context中bean的生命周期,后面贴了一部分代码,但根本没理解代码意思,有幸在博客园看到一篇关于这部分的代码解析,特别长,特此做了一些整理笔记,并附上链接:htt ...

  4. abp模块生命周期设计思路剖析

    abp中将生命周期事件抽象为4个接口: //预初始化 public interface IOnPreApplicationInitialization { void OnPreApplicationI ...

  5. Android 4学习(5):概述 - Android应用程序的生命周期

    参考:<Professional Android 4 Application Development> Android应用程序生命周期 Android应用程序无法控制自己的生命周期,因此它 ...

  6. WebApp中的页面生命周期及路由管理

    最近切换到一个新项目,使用的技术栈是Require+Backbone,鉴于对鞋厂webapp框架的了解,发现这个新项目有些缺陷,主要是单纯依赖Backbone造成的,也就是Backbone的好和坏都在 ...

  7. Activity 和 生命周期: 创建

    了解了整体的android创建流程之后,就分析一下到底这个过程中做了什么? activity创建中开始时由activityStack中的realstartActivityLocked函数中调用了act ...

  8. IOS应用程序生命周期的AppDelegate详解

    IOS 中的 AppDelegate.m/h 文件是很重要的呢,因为它是对 Application 的整个生命周期进行管理的. 先明白,每个iPhone应用程序都有一个UIApplication,UI ...

  9. 【不懂】spring bean生命周期

    完整的生命周期(牢记): 1.spring容器准备 2.实例化bean 3.注入依赖关系 4.初始化bean 5.使用bean 6.销毁bean Bean的完整生命週期可以認為是從容器建立初始化Bea ...

随机推荐

  1. 《C++编程规范:101条规则、准则与最佳实践》学习笔记

    转载:http://dsqiu.iteye.com/blog/1688217 组织和策略问题 0. 不要为小事斤斤计较.(或者说是:知道什么东西不需要标准化) 无需在多个项目或者整个公司范围内强制实施 ...

  2. 生成prefix.pch文件

    (借鉴网络资源)

  3. 企业内部从零开始安装docker hadoop 提纲

    下载apache 项目  http://mirror.bit.edu.cn/apache/ 下载 centos 7 安装 盘 iso 大约7G 安装 centos7 copy 光盘盘中的 packag ...

  4. 介绍开源的.net通信框架NetworkComms框架 源码分析(十三)ThreadSafeStream

    原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架  作者是英国人  以前是收费的 目前作者已经开源  许可是 ...

  5. oracle常用操作指令

    1.cmd   sqlplus /nolog; 2.conn  sys/  as sysdba; 3.create user query identified by query;//创建用户 4.al ...

  6. MATLAB - 练习程序,求灰度图像均值、最大、最小数值

    clear all; close all; clc img=imread('lena.bmp'); figure; imshow(uint8(img)); [m n]=size(img); img_m ...

  7. JVM 基础知识

    JVM 基础知识(GC) 2013-12-10 00:16 3190人阅读 评论(1) 收藏 举报 分类: Java(49) 目录(?)[+] 几年前写过一篇关于JVM调优的文章,前段时间拿出来看了看 ...

  8. Lua.LearningLua.5-document-for-luaL_findtable-function

    Learning Lua: 5 - Document for luaL_findtable() function 文档中没有找到luaL_findtable()函数的说明,这里尝试补充. LUALIB ...

  9. quartus使用笔记

    quartus中默认顶层文件名与工程名相同,或自行设置顶层文件:project->set as top-leval entity 顶层模块名要与工程名相同 RTL是编译后的结果,并没有与实际的硬 ...

  10. 20145225《Java程序设计》 第5周学习总结

    20145225<Java程序设计> 第5周学习总结 教材学习内容总结 第八章 异常处理 8.1语法与继承架构 try.catch:try.catch代表错误的对象后做一些处理. 异常继承 ...