本节目录
- 介绍模块
- 生命周期事件
- 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 可以调用其方法.
原标题:[Architect] ABP(现代ASP.NET样板开发框架) 模块系统
关键词:ASP.NET