问题描述
请阅读以下场景:
在使用插件库 DotnetCorePlugins 构建的基于插件的应用程序中,其中单个主机应用程序与微型插件一起使用,一切运行良好。但是我需要根据需要从这些插件中注册启动服务,所以说plugin1 引入了一个中间件,plugin2 引入了一个管道,plugin3 引入了一些 mediatr 服务等...
我深入研究了 orchardcore & Orchard 通过使用 StartupBase 类来做到这一点,但我无法了解他们是如何做到的 [如果我的假设是正确的,果园使用 msbuild 作为插件,这与 loadcontext 不同图书馆]。
我的要求和结构与果园不同,但我喜欢拥有 StartupBase 类的想法 其中我可以定义配置顺序和服务初始化顺序,并在主主机应用程序初始化时调用它 有人可以指导我采取正确的方法来做到这一点,只要它清晰易懂,即使是最小的流程步骤我也可以。 插件启动文件必须处理主机中定义的顺序并注入主启动总线。
解决方法
如果我理解正确的话……您可以像这样在 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);
}