简介

模块依赖

 

PreInitialize(预初始化)

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

插件模块

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

Public 模块

 

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

Admin 应用

Shutdown(关闭)

模块定义

模块定义

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

S 应用

 

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

 

 

生命周期方法

id 传值

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

PostInitialize

login 方法

生命周期方法

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

m 模块

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

简介

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

模块定义类负责把自己的类注册到依赖注入里、配置应用和其它模块、为应用添加新的特性等…

a 方法

 

本节内容:

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

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

 

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

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

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

 

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

必发娱乐官方网站,文档目录

Initialize

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

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)系统为模块定义和设置配置。

模块生命期

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

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

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

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可以从startup模块解析依赖并按顺序初始化它们。

Shutdown

Initialize(初始化)

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

  • 简介
  • 模块定义
  • 生命周期方法
    • PreInitialize(预初始化)
    • Initialize(初始化)
    • PostInitialize(提交初始化)
    • Shutdown(关闭)
  • 模块依赖
  • 插件模块
    • Asp.net
      Core
    • Asp.net Mvc,Web
      Api

      • 插件中的控制器
  • 附加程序集
  • 自定义模块方法
  • 模块配置
  • 模块生命期
public class MyBlogApplicationModule : AbpModule{    public override void Initialize()    {         IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly;    }}

模块依赖

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

 

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

 

文档目录

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

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

本节内容:

PreInitialize

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

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

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

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

 

 

PostInitialize(提交初始化)

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

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

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

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

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

Author

发表评论

电子邮件地址不会被公开。 必填项已用*标注

相关文章