.net core 为非基于HTTP的中间件管道实现IAppBuilder

.net core 为非基于HTTP的中间件管道实现IAppBuilder,.net-core,.net-core-2.2,.net Core,.net Core 2.2,我想构建一个基于中间件的管道,它与ASP.NET核心或HTTP无关(想想构建数据仓库的提取、转换和加载管道)。目前,这是在使用IHostBuilder的自托管应用程序中完成的。这种解决方案有很多步骤,因此,能够像ASP.NET Core那样将中间件插入管道的模式非常吸引人。我想我应该首先基于.NETCore中的IAppBuilder创建自己的管道生成器界面,如下所示 public interface IEtlPipelineBuilder { /// <summary>

我想构建一个基于中间件的管道,它与ASP.NET核心或HTTP无关(想想构建数据仓库的提取、转换和加载管道)。目前,这是在使用
IHostBuilder
的自托管应用程序中完成的。这种解决方案有很多步骤,因此,能够像ASP.NET Core那样将中间件插入管道的模式非常吸引人。我想我应该首先基于.NETCore中的
IAppBuilder
创建自己的管道生成器界面,如下所示

public interface IEtlPipelineBuilder
{
    /// <summary>
    /// Gets or sets the service provider that provides access to the ETL engines service container.
    /// </summary>
    IServiceProvider PipelineServices { get; set; }
    /// <summary>
    /// Gets the set of ETL features the engine provides.
    /// </summary>
    //IFeatureCollection ServerFeatures { get; }
    /// <summary>
    /// Gets a key/value collection that can be used to share data between middleware.
    /// </summary>
    IDictionary<string, object> Properties { get; }
    /// <summary>
    /// Adds a middleware delegate to the ETL pipeline.
    /// </summary>
    IEtlPipelineBuilder Use(Func<JobDelegate, JobDelegate> middleware);
    /// <summary>
    /// Creates a new  instance of a pipeline builder that shares the properties of this IEtlPipelineBuilder
    /// </summary>
    IEtlPipelineBuilder New();
    /// <summary>
    /// Builds the delegate used by this application to process ETL job requests.
    /// </summary>
    JobDelegate Build();
}
公共接口IEtlPipelineBuilder
{
/// 
///获取或设置提供对ETL引擎服务容器的访问的服务提供程序。
/// 
IServiceProvider PipelineServices{get;set;}
/// 
///获取引擎提供的ETL功能集。
/// 
//IFeatureCollection服务器功能{get;}
/// 
///获取可用于在中间件之间共享数据的键/值集合。
/// 
IDictionary属性{get;}
/// 
///将中间件委托添加到ETL管道。
/// 
IEtlPipelineBuilder使用(Func中间件);
/// 
///创建共享此IEtlPipelineBuilder属性的管道生成器的新实例
/// 
IEtlPipelineBuilder新建();
/// 
///生成此应用程序用于处理ETL作业请求的委托。
/// 
JobDelegate Build();
}
现在我需要实现这一点,这就是我的问题的起点

  • 是否已经有一个实现,我可以用来构建我自己的、与HTTP无关的基于中间件的管道
  • 有人能想到实现我自己的构建器有什么缺点吗

  • 关于问题3,我能想到的唯一一件事是,可能无法利用基于OWIN管道的其他扩展,但请随意提供其他扩展。

    我会忘记与HTTP有关的任何事情。你可能想看看责任链模式()或者甚至是战略模式,然后根据你的需要修改它。谢谢你的链接。我读了之后,似乎这就是ASP.NET核心团队用来在Http管道中实现中间件的模式。他们似乎提供非http服务和类来帮助处理非http主机,就像我的(通用主机)一样使用服务和中间件实现这种模式似乎非常直观,因此我想知道是否还有其他非基于http的类可以利用,而不是实现整个IAppBuilder类型的代码。我会忘记与http有关的任何事情。你可能想看看责任链模式()或者甚至是战略模式,然后根据你的需要修改它。谢谢你的链接。我读了之后,似乎这就是ASP.NET核心团队用来在Http管道中实现中间件的模式。他们似乎提供了非http服务和类来帮助处理非http主机,就像我的(通用主机)一样,而且使用服务和中间件实现此模式似乎非常直观,因此我想知道是否还有其他基于非http的类可以利用,而不是实现整个IAppBuilder类型代码。