ABP引用模块的方法

90 阅读2分钟

通过插件方式使用模块

可以将模块加载为插件.这意味着你可能不需要在解决方案中引用模块的程序集,就可以像其它模块一样在启动应用时加载该模块.

基本用法

IServiceCollection.AddApplication() 扩展方法可以获取配置插件源的选项.

示例: 从文件夹加载插件

using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.Modularity.PlugIns;

namespace MyPlugInDemo.Web
{
	//这是典型的ASP.NET Core应用程序的Startup类
    public class Startup
    {
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddApplication<MyPlugInDemoWebModule>(options =>
            {
                //PlugInSources.AddFolder从指定的目录中加载程序集(通常为dll).
                options.PlugInSources.AddFolder(@"D:\Temp\MyPlugIns");
            });
        }

        public void Configure(IApplicationBuilder app)
        {
            app.InitializeApplication();
        }
    }
}

就这样.ABP将在这个目录中发现这些模块,像其它常规一样配置和初始化它们.

插件源

options.PlugInSources类实际上是IPlugInSource接口的一系列实现并且 AddFolder方法仅仅是以下表达式的便捷方法:

options.PlugInSources.Add(new FolderPlugInSource(@"D:\Temp\MyPlugIns"));

AddFolder()方法仅在给定目录下查找程序集文件,而不在子目录中查找.你可以传递一个SearchOption.AllDirectories参数作为第二个参数,来递归地查找它的子目录.

这里有两个内置插件源的示例:

  • PlugInSources.AddFiles()方法获取程序集(通常是dll)文件列表.这是使用FilePlugInSource类的快捷方式.
  • PlugInSources.AddTypes()方法获取模块类类型的列表.如果实用化此方法,则需要自己加载模块的程序集,但是在需要时它提供了灵活性.这是使用TypePlugInSource类的快捷方式.

如果需要,你可以创建自己的IPlugInSource的接口实现,并像其它方法一样添加到options.PlugInSources中.

通过 DependOn引用模块

模块化是ABP vNext最精髓的设计

开发的独立模块使用有3种方式:

1 插件式使用

2 解决方案引用式:DependOn 方式

3 Nuget私服

下面使用解决方案引用式

1、在模板项目的UI层添加项目引用

引用自己开发的两个应用层项目

2、在moudle中ConfigureServices方法中,添加初始化动态api的配置

3、添加DependsOn。

运行项目,看到奇迹。自己新建项目的动态api添加到了模板项目的api中!模块可以轻松地集成、复用