星空网 > 软件开发 > ASP.net

ABP文档

文档目录

 

本节内容:

  • 简介
  • 模块定义
  • 生命周期方法
    • PreInitialize(预初始化)
    • Initialize(初始化)
    • PostInitialize(提交初始化)
    • Shutdown(关闭)
  • 模块依赖
  • 插件模块
    • Asp.net Core
    • Asp.net Mvc,Web Api
      • 插件中的控制器
  • 附加程序集
  • 自定义模块方法
  • 模块配置
  • 模块生命期

 

简介

 ABP为创建模块及组织它们提供基础框架。一个模块可依赖于另一个模块。通常地,一个程序集做为一个模块。如果你的应用是多个程序集,建议为每个程序集定义一个模块。

模块系统目前把焦点放在服务端上而不是客户端。

 

模块定义

一个模块定义成一个继承于AppModule类的类。 假设我们正在开发一个能用于不同应用的Blog模块,最简单的模块定义可能像如下所示:

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

模块定义类负责把自己的类注册到依赖注入里(约定做法如上所示)、配置应用和其它模块、为应用添加新的特性等...

 

生命周期方法

ABP在应用启动和关闭时,为模块调用一些特定的方法。你可以重写这些方法来执行一些特定的任务。

ABP按依赖关系顺序调用这些方法。如果模块A依赖于模块B,模块B会在模块A前初始化,确切的启动方法顺序是:预初始化B,预初始化A,初始化B,提交B和提交A。这就是依赖路线。Shutdown方法类似,不过顺序是相反的。

 

PreInitialize(预初始化)

应用启动时最先调用这个方法,它通常在初始化前configure(配置)框架或是其它模块。

同样,你也可以在这里写一些特定的代码运行在依赖注入注册之前。例如,你想创建一个约定注册(Conventional Registration)类,你应该在这里使用IcoManager.AddConventionalRegisterer方法来注册这个类。

 

Initialize(初始化)

依赖注入注册一般都在这里完成,一般都使用IcoManager.RegisterAssemblyByConvention方法。如果你想自定义依赖注册,请查看dependency injection documentation.

 

PostInitialize(提交初始化)

在启动过程中最后调用这个方法,此时可以安全的解析依赖。

 

Shutdown(关闭)

当应用关闭时调用这个方法。

 

模块依赖

一个模块可以依赖于其它模块,它要求使用DenpendsOn特性显式地声明依赖关系,如下:

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

由于我们声明MyBlogApplicationModule依赖于MyBlogCoreModule,所以MyBlogCoreModule会在MyBlogApplicationModule前初始化。

ABP可以从startup模块解析依赖并按顺序初始化它们。

 

插件模块

尽管ABP解析是从startup模块开始到所有依赖,但也可以动态加载模块。AbpBootstrapper类定义PlugInSpurces属性,该属性用来就是用来添加源到动态加载插件模块,一个插件源可以是任何实现了IPlugInSource接口的类,PlugInFolderSource类实现了这个接口,并指明在某个文件夹下的程序集里获取一个插件模块。

Asp.net Core

译注:暂略

 

Asp.net Mvc,Web Api

在经典的Asp.net Mvc应用里,我们可以重写global.asax里的Application_Start来添加文件夹插件,如下所示:

public class MvcApplication : AbpWebApplication<MyStartupModule>{  protected override void Application_Start(object sender, EventArgs e)  {    AbpBootstrapper.PlugInSources.AddFolder(@"C:\MyPlugIns");    //...    base.Application_Start(sender, e);  }}

 

插件中的控制器

如果你的模块包含MVC或Web Api控制器,Asp.net不会检查你的控制器,为解决这个问题,你可以修改global.asax文件,如下:

using System.Web;using Abp.PlugIns;using Abp.Web;using MyDemoApp.Web;[assembly: PreApplicationStartMethod(typeof(PreStarter), "Start")]namespace MyDemoApp.Web{  public class MvcApplication : AbpWebApplication<MyStartupModule>  {  }  public static class PreStarter  {    public static void Start()    {      //...      MvcApplication.AbpBootstrapper.PlugInSources.AddFolder(@"C:\MyPlugIns\");      MvcApplication.AbpBootstrapper.PlugInSources.AddToBuildManager();    }  }}

 

附加程序集

IAssemblyFinder和ITypeFinder(ABP用来检查指定类)的默认实现仅仅在自身程序集中查找模块和类型。我们可以在我们的模块重写GetAdditionalAssemblies方法来附加程序集。

 

自定义模块方法

你的模块同样可以自定义方法,其它依赖于该模块的模块,就可以使用这些方法。假设MyModule2依赖于MyModule1,想在预初始化时调用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,所以MyModule2可以调用MyModule1的自定义方法,这仅在Module2依赖于Module1的情况下可用。

 

模块配置

尽管自定义模块方法能配置模块,但我们建议使用启动配置(startup configuration)系统为模块定义和设置配置。

 

模块生命期

模块类自动地被注册成单例。




原标题:ABP文档

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

亚马逊买家签收后以没收到货退款怎么办?:https://www.ikjzd.com/articles/142289
旁氏发布“5年计划”——东南亚市场份额翻倍!:https://www.ikjzd.com/articles/142290
关于亚马逊店铺月租费用的几个问题卖家们都知道吗?:https://www.ikjzd.com/articles/142291
亚马逊账号大规模二审到底是怎回事?!文末附亚马逊保险购买途径:https://www.ikjzd.com/articles/142292
eBay店铺营销要点:https://www.ikjzd.com/articles/142293
Pretty Diva案例分析| 品牌重塑:https://www.ikjzd.com/articles/142294
春季热卖单品!空气净化器单周销售额近三十万!:https://www.goluckyvip.com/news/188215.html
托克劳/Tokelau/托克劳群岛:https://www.kjdsnews.com/a/1836548.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流