你的位置:首页 > ASP.net教程

[ASP.net教程][Architect] ABP(现代ASP.NET样板开发框架) 模块系统


 

本节目录

  • 介绍模块
  • 生命周期事件
    • PreInitialize
    • Initialize
    • PostInitialize
    • Shutdown
  • 模块依赖
  • 自定义模块方法

 

介绍模块

ABP提供基础设施让我们创建application,就是创建和组合使用modules.

1个module可以依赖其他的module,通常1个程序集可以做为1个module.

1个module由1个继承AbpModule来定义.

我们可以开发1个博客module,用在不同的applications.

最简单的定义如下:

public class MyBlogApplicationModule : AbpModule{  public override void Initialize()  {    IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());  }}

ABP扫描所有的程序集,找到继承AbpModule 所有类,建议每个程序集定义1个Module.

 

生命周期事件

ABP在application启动和结束的时候会调用modules的特定方法.你可以重写这些方法,以执行一些特定的任务.

ABP会根据依赖顺序调用这些方法,如果module A 依赖module B,则方法执行顺序为:

PreInitialize-B, PreInitialize-A, Initialize-B, Initialize-A, PostInitialize-B and PostInitialize-A

Shutdown方法则相反顺序.

 

PreInitialize

该方法在程序启动的时候被调用,会在依赖注入注册之前执行.可以在此处注册一些类和事件到IoC 容器中.

 

Initialize

该方法是在dependency injection注册的位置.通常,会调用IocManager.RegisterAssemblyByConvention方法.如果你想自定义依赖注册,可以查看相关文档.

 

PostInitialize

该方法会在启动时的最后调用,这里可以安全的使用容器解析对象.

 

Shutdown

该方法会在应用关闭的时候调

 

模块依赖

1个module可以依赖其他的module,ABP会自动解析这些依赖.

[DependsOn(typeof(MyBlogCoreModule))]public class MyBlogApplicationModule : AbpModule{  public override void Initialize()  {    IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());  }}

由于我们的定义,core module会在application module之前先初始化.

 

自定义模块方法

模块也可以为其他模块提供自定义方法,假设MyModule2 依赖MyModule1,MyModule2希望在PreInit方法中调用MyModule1的方法.

public class MyModule1 : AbpModule{  public override void Initialize()  {    IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());  }  public void MyModuleMethod1()  {    //this is a custom method of this module  }}[DependsOn(typeof(MyModule1))]public class MyModule2 : AbpModule{  private readonly MyModule1 _myModule1;  public MyModule2(MyModule1 myModule1)  {    _myModule1 = myModule1;  }  public override void PreInitialize()  {    _myModule1.MyModuleMethod1(); //Call MyModule1's method  }  public override void Initialize()  {    IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());  }}

这里,我们通过构造函数注入的方式将MyModule1注入进来,所以MyModule2 可以调用其方法.