1.abp框架的启动是从Global.asax文件的Application_Start启动的,当然代表Global的application必须从AbpWebApplication继承:

  public class MvcApplication : AbpWebApplication
{
protected override void Application_Start(object sender, EventArgs e)
{
AbpBootstrapper.IocManager.IocContainer.AddFacility<LoggingFacility>(f => f.UseLog4Net().WithConfig("log4net.config"));
base.Application_Start(sender, e);
}
}

   2.Application_Start方法中主要是通过AbpBootstrapper来将各个Abpmodule模块载入Abp框架中的AbpBootstrapper类在Abp.dll中, 其主要用于框架的基本配置的注册和初始化,AbpBootstrapper调用Initialize方法初始化

    public abstract class AbpWebApplication : HttpApplication
{/// <summary>
/// This method is called by ASP.NET system on web application's startup.
/// </summary>
protected virtual void Application_Start(object sender, EventArgs e)
{
ThreadCultureSanitizer.Sanitize(); AbpBootstrapper.IocManager.RegisterIfNot<IAssemblyFinder, WebAssemblyFinder>();
AbpBootstrapper.Initialize();
}

而在 AbpBootstrapper.Initialize()方法在执行AbpBootstrapper的Initialize()方法时首先会执行AbpCoreInstaller的Initialize()

    public virtual void Initialize()
{
IocManager.IocContainer.Install(new AbpCoreInstaller()); IocManager.Resolve<AbpStartupConfiguration>().Initialize(); _moduleManager = IocManager.Resolve<IAbpModuleManager>();
_moduleManager.InitializeModules();
}

 AbpCoreInstaller的Initialize() 主要执行的就是注册系统框架级的所有配置类,具体代码如下

  internal class AbpCoreInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(
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(),
//此处省略若干行 );
}
}

 3.接着解析AbpStartupConfiguration的实例调用其Initialize()来完成所有配置项的初始设值。 

 4.最后,IAbpModuleManager的实例调用其InitializeModules()初始化所有的Module

  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());
}

主意:从上面的代码可以看出,ABP框架初始化每个module时,是先完成所有Module的PreInitialize,然后再执行所有Module的Initialize,最后执行PostInitialize。不是执行完一个Module的这三个方法,再去执行下一个Module的这三个方法。

另外,AbpModule的基本信息是用AbpModuleInfo封装的,他里面其实也就是将一个abpmodule类封装成Type,Assembly以及模块的依赖模块的AbpModuleInfo等信息。

5.一旦应用程序结束将在AbpWebApplications中调用AbpBootstrapper的Dispose方法,Dispose通过IAbpModuleManager,执行其ShutdownModules,关闭所有Module。

  protected virtual void Application_End(object sender, EventArgs e)
{
AbpBootstrapper.Dispose();
}
 public virtual void ShutdownModules()
{
var sortedModules = _modules.GetSortedModuleListByDependency();
sortedModules.Reverse();
sortedModules.ForEach(sm => sm.Instance.Shutdown());
}

最新文章

  1. Mongodb插入记录
  2. Ubuntu 14 安装并破解SSH工具 SecureCRT
  3. javascript 函数节流方法
  4. Java基础知识强化之IO流笔记76:NIO之 Channel(通道)之间的数据传输
  5. 我的博客模板(线框图wireframe)
  6. C语言根据日期取其位于一年中的第几天
  7. iOS开发——图形与动画篇OC篇&amp;图层基本上动画
  8. php提取字符串中的数字
  9. Hadoop-2.2.0中国文献—— MapReduce 下一代 -- 公平调度
  10. typeof小结
  11. Object对象
  12. Android实现版本更新
  13. HDU-1828-Picture(线段树)
  14. [bzoj4771] 七彩树
  15. springMVC--XML解析
  16. Ex 2_16 给定一个无穷数组..._第二次作业
  17. 03_JSX理解和使用
  18. jQuery的attr方法处理checkbox的问题
  19. spoj MINSUB 单调栈+二分
  20. yii第二步

热门文章

  1. JAVA-比较浮点型数据
  2. ACM-ICPC 2018 焦作赛区网络预赛 B Mathematical Curse(DP)
  3. js 数组拷贝与深拷贝
  4. SpringBoot入门笔记(四)、通常Mybatis项目目录结构
  5. Select 子句后的别名,在where条件中不能使用
  6. FILE SIGNATURES TABLE
  7. 2016-2017-2 20155324实验二《Java面向对象程序设计》实验报告
  8. nth-of-type(n)
  9. 第24月第30天 scrapy《TensorFlow机器学习项目实战》项目记录
  10. 数据库并发控制及SQL Server的并发控制机制