首页 > 解决方案 > 如何在 Net Core MVC 模块化插件应用程序中注入多个启动配置文件?

问题描述

请阅读以下场景

在使用插件库DotnetCorePlugins构建的基于插件的应用程序中,其中单个主机应用程序与微插件一起服务,一切运行良好。但是我需要根据需要从这些插件中进行启动服务注册,所以说plugin1 引入了中间件,plugin2 引入了管道,plugin3 一些 mediatr 服务等......

我深入研究了 OrchardCore 和 Orchard 通过使用StartupBase类来做到这一点,但我无法找出他们是如何做到的[如果我的假设是正确的,orchard 使用 msbuild 作为插件,不像这个库的 loadcontext]。

我的要求和结构与果园不同,但我喜欢有一个 StartupBase 类的想法,我可以在其中定义配置顺序和服务初始化顺序,并在主主机应用程序初始化时调用它可以有人指导我正确的方法吗?只要清楚易懂,即使是最小的流程步骤,我也可以。插件启动文件必须处理主机中定义的顺序并注入主启动总线。

标签: c#asp.net-mvc.net-coreorchard-modulesapp-startup

解决方案


如果我对您的理解正确...您可以像这样在 Startup 中注册许多自定义项...

创建一个 ServiceExtensions 类

using Microsoft.Extensions.Configuration;
using Microsoft.EntityFrameworkCore;

namespace Your.Custom.Namespace
{
    public static class ServiceExtensions
    {
        public static void ConfigureMiddleware(this IServiceCollection services, 
                                                      IConfiguration config)
        {
            // custom stuff
        }
        public static void ConfigurePipeline(this IServiceCollection services, 
                                                      IConfiguration config)
        {
            // custom stuff
        }
        public static void ConfigureMedia(this IServiceCollection services, 
                                                      IConfiguration config)
        {
            // custom stuff
        }
    }
}

然后在 StartUp 中,调用这些方法...

public void ConfigureServices(IServiceCollection services)
{
   ... other configs
   services.ConfigureMiddleware(Configuration);
   services.ConfigurePipeline(Configuration);
   services.ConfigureMedia(Configuration);
}

推荐阅读