c# - 如何在 Net Core MVC 模块化插件应用程序中注入多个启动配置文件?
问题描述
请阅读以下场景:
在使用插件库DotnetCorePlugins构建的基于插件的应用程序中,其中单个主机应用程序与微插件一起服务,一切运行良好。但是我需要根据需要从这些插件中进行启动服务注册,所以说plugin1 引入了中间件,plugin2 引入了管道,plugin3 一些 mediatr 服务等......
我深入研究了 OrchardCore 和 Orchard 通过使用StartupBase类来做到这一点,但我无法找出他们是如何做到的[如果我的假设是正确的,orchard 使用 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);
}
推荐阅读
- scala - 在 scala 宏中,如何获取类在运行时的全名?
- ios - iOS 13 - 未加载库:AppTrackingTransparency.framework/AppTrackingTransparency
- node.js - Puppeteer:会话关闭。该页面很可能已关闭
- javascript - 是否可以通过控制台检测注入的 Javascript?
- reactjs - React App 仅在第一次状态更改时重新渲染,即使更改成功,第二次更改也不可见
- javascript - 将数据从asp.net mvc中的2个不同jquery传递到同一个控制器
- python-3.x - Python3.8:将一个数据文件拆分为多个文件,所有文件均由文件中的关键字命名
- r - 上传多张人脸图像(5-10 张人脸图像,相同尺寸),更改为矩阵并在 R Shiny 中从头开始执行 PCA
- python - 在 Eclipse FileNotFoundError 上设置 Selenium 和 Python:[WinError 2]
- sql - 我如何才能对在 SQL 中保存为 nvarchar 的日期进行排序