深入浅出-模块开发

摘要:
介绍ABP本身是一个包含许多nuget包的模块化框架。你也可以通过这种方式配置其他服务和模块。依赖模块可能依赖于另一个模块,但你只需要定义直接依赖项。ABP在启动时会调查应用程序的依赖关系,并以正确的顺序初始化/关闭模块。

介绍

ABP本身是一个包含许多nuget包的模块化框架。它还提供了一个完整的基础架构来开发你自己的具有实体、服务、数据库集成、 API、UI组件等等功能的应用程序模块。

模块类

每个模块都应该定义一个模块类.定义模块类的最简单方法是创建一个派生自AbpModule的类,如下所示:

public class BlogModule : AbpModule
{
            
}

配置依赖注入和其他模块

ConfigureServices方法

ConfigureServices是将你的服务添加到依赖注入系统并配置其他模块的主要方法。例:

public class BlogModule : AbpModule
{
    public override void ConfigureServices(ServiceConfigurationContext context)
    {
        //...
    }
}

你可以按照Microsoft的文档中的说明逐个注册依赖项.但ABP有一个依照约定的依赖注册系统,可以自动注册程序集中的所有服务。有关依赖项注入系统的更多信息,请参阅依赖项注入文档。

你也可以通过这种方式配置其他服务和模块。例:

public class BlogModule : AbpModule
{
    public override void ConfigureServices(ServiceConfigurationContext context)
    {
        //为应用程序配置默认的连接字符串
        Configure<AbpDbConnectionOptions>(options =>
        {
            options.ConnectionStrings.Default = "......";
        });
    }
}

有关配置系统的更多信息,请参阅配置(TODO:link)文档。

配置服务前和后

AbpModule类还定义了PreConfigureServicesPostConfigureServices方法用来在ConfigureServices之前或之后覆盖和编写你的代码.请注意,在这些方法中编写的代码将在所有其他模块的ConfigureServices方法之前/之后执行。

应用程序初始化

一旦配置了所有模块的所有服务,应用程序就会通过初始化所有模块来启动.在此阶段,你可以从IServiceProvider中获取服务,因为这时它已准备就绪且可用。

OnApplicationInitialization方法

你可以在启动应用程序时覆盖OnApplicationInitialization方法来执行代码。例:

public class BlogModule : AbpModule
{
    //...

    public override void OnApplicationInitialization(ApplicationInitializationContext context)
    {
        var myService = context.ServiceProvider.GetService<MyService>();
        myService.DoSomething();
    }
}

OnApplicationInitialization通常由启动模块用于构建 ASP.NET Core 应用程序的中间件管道。例:

[DependsOn(typeof(AbpAspNetCoreMvcModule))]
public class AppModule : AbpModule
{
    //...

    public override void OnApplicationInitialization(ApplicationInitializationContext context)
    {
        var app = context.GetApplicationBuilder();
        var env = context.GetEnvironment();

        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseMvcWithDefaultRoute();
    }
}

如果模块需要,你还可以执行启动逻辑

应用程序初始化前和后

AbpModule类还定义了OnPreApplicationInitializationOnPostApplicationInitialization方法用来在OnApplicationInitialization之前或之后覆盖和编写你的代码。请注意,在这些方法中编写的代码将在所有其他模块的OnApplicationInitialization方法之前/之后执行。

应用程序关闭

最后,如果要在应用程序关闭时执行某些代码,你可以重写OnApplicationShutdown方法。

模块依赖

在模块化应用程序中,一个模块依赖于另一个或几个模块并不罕见.如果一个Abp模块依赖于另一个模块,它必须声明[DependsOn]特性,如下所示:

[DependsOn(typeof(AbpAspNetCoreMvcModule))]
[DependsOn(typeof(AbpAutofacModule))]
public class BlogModule
{
    //...
}

你可以根据需要使用多个DependsOn特性或将多个模块类型传递给单个DependsOn特性。

依赖模块可能依赖于另一个模块,但你只需要定义直接依赖项。ABP在启动时会调查应用程序的依赖关系,并以正确的顺序初始化/关闭模块。

框架模块 vs 应用程序模块

模块分为两种类型.这两种类型并没有任何结构上的区别,只是按功能和用途分类:

  • 框架模块:这些是框架的核心模块如缓存, 邮件, 主题, 安全, 序列化, 验证, EF Core集成, MongoDB集成... 等. 它们没有应用/业务功能,它们提供了日常开发经常用到的通用基础设施,集成和抽象。
  • 应用程序模块:这些模块实现了特定的应用/业务功能像博客, 文档管理, 身份管理, 租户管理... 等等. 它们通常有自己的实体,服务,API和UI组件。

免责声明:文章转载自《深入浅出-模块开发》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇uni-app 左上角返回按钮消失Linux实现树莓派3B的国密SM9算法交叉编译——(一)环境部署、简单测试与eclipse工程项目测试下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

sql 加减时间

另外,MySQL中还有两个函数subdate(),subtime(),建议,用date_sub()来替代。MySQLperiod_add(P,N):日期加/减去N月。mysql˃selectperiod_add,period_add|period_add|period_add|结果|200810|20080806|MySQLperiod_diff:日期P1-...

uniapp中组件属性设置不生效的解决方案

例如,每次将滚动视图组件的滚动顶部属性值设置为0时,只能第一次成功返回顶部。组件中滚动顶部的实际值更改后,其绑定属性不会同时更改。...

CommonJS规范

NodeJS是本规范的实现。环境、运行、JSGILocaland远程包和包管理关于每个子规范的具体定制进度,请参考官方网站描述:Apache CouchDB和node.js。然而,这些项目中的大多数只实现了CommonJS的一些规范。具体项目及实施请参见官方网站描述:http:...

使用事务和SqlBulkCopy批量插入数据

类似与MicrosoftSQLServer包中名为bcp的命令行应用程序。但是使用SqlBulkCopy类可以编写托管代码解决方案,性能上优于bcp命令行应用程序,更优于如Insert方式向SQLServer表加载大量数据。SqlBulkCopy可以应用到大批量数据的转移上,而不管数据源是什么。之前在做winform开发的时候,发现当datagridview...

季调方法论

理论与实践“季节性调整原则季节性调整方法分析季节性调整实践中遇到的问题只有同比数据缺少春节效应阅读”通货膨胀的季节性调整和预测模型“通货膨胀预测CPI的季节性调整具有明显的春节效应考虑春节效应的季节性调节春节效应的确定CPI的季节调整基于季节性调整后CPI的预测通货膨胀的修正(应对非洲猪瘟的影响)修订并扩大了季度调查方法的CPI预测读数...

部署springboot+vue项目文档(若依ruoyi项目部署步骤)

1: 部署Linux+nginx部署背景代码1.1因为我使用了idea工具进行开发,所以终端中的mvnclean包生成了相应的jar包。这个jar包可以在相应文件所在目录的目标中找到。linux服务器需要加载redis和nginx。redis存储缓存数据,nginx用于代理前端和后端服务。打包vue项目并将dist文件复制到tomcat的webapps目录中...