Asp.net core 在ASP.NET核心中注册服务,作为中间件注册的一部分

Asp.net core 在ASP.NET核心中注册服务,作为中间件注册的一部分,asp.net-core,asp.net-core-3.1,Asp.net Core,Asp.net Core 3.1,使用ASP.NET Core 3.1,我在启动的配置方法中添加了一个SitemapMiddleware: public void Configure(IApplicationBuilder builder, IWebHostEnvironment environment) { builder.UseSitemap(); } 其中UseSitemap扩展名为: public static class SitemapMiddlewareExtensions { public static

使用ASP.NET Core 3.1,我在启动的配置方法中添加了一个
SitemapMiddleware

public void Configure(IApplicationBuilder builder, IWebHostEnvironment environment) {
  builder.UseSitemap();
}
其中
UseSitemap
扩展名为:

public static class SitemapMiddlewareExtensions {
  public static IApplicationBuilder UseSitemap(this IApplicationBuilder builder) {
    return builder.MapWhen(x => x.Request.Path.StartsWithSegments("/sitemap.xml"), 
      x => x.UseMiddleware<SitemapMiddleware>(route));
  } 
}
如何在方法
UseSitemap
中执行此操作


或者创建一个IServiceCollection扩展,用于注册SitemapService的Startup的ConfigureServices?

AFAIK,当我们谈到中间件时,我们实际上是在特定请求的上下文中进行讨论。只要未构建ServiceProvider,我们就可以继续向服务集合添加服务。但是,当我们进入中间件管道时,我们已经构建了它,我们不能再注册服务了。在这种情况下,您为什么要延迟依赖项的注册?
或者创建一个IServiceCollection扩展,以便在注册SitemapService的Startup的ConfigureServices中使用?
是的,这通常是推荐的方法。调用
启动.Configure
时,服务提供程序已经生成,无法修改。@Nikosi因此我想我应该使用Configure中的Sitemap extension方法来添加Sitemap中间件,并在ConfigureServices中添加Sitemap extension来添加Sitemap服务和其他Sitemap配置。。。这有意义吗?我只是想创建一个站点地图组件,在不同的项目中使用,但它遵循ASP.NET Core注册和配置Middleware@SaiGummaluri我没有必要推迟注册。。。可能使用Configure中的UseSitemap extension方法添加站点地图中间件,使用ConfigureServices中的AddSitemap extension添加站点地图服务和其他站点地图配置。。。这有意义吗?我只是尝试创建一个站点地图组件,用于不同的项目,但它遵循ASP.NET Core注册和配置MiddlewareHi的指导原则。只是一个友好的提醒。对于这个问题仍然没有公认的答案。您还需要其他东西吗?好的,当我们谈到中间件时,我们基本上是在特定请求的上下文中讨论的。只要未构建ServiceProvider,我们就可以继续向服务集合添加服务。但是,当我们进入中间件管道时,我们已经构建了它,我们不能再注册服务了。在这种情况下,您为什么要延迟依赖项的注册?
或者创建一个IServiceCollection扩展,以便在注册SitemapService的Startup的ConfigureServices中使用?
是的,这通常是推荐的方法。调用
启动.Configure
时,服务提供程序已经生成,无法修改。@Nikosi因此我想我应该使用Configure中的Sitemap extension方法来添加Sitemap中间件,并在ConfigureServices中添加Sitemap extension来添加Sitemap服务和其他Sitemap配置。。。这有意义吗?我只是想创建一个站点地图组件,在不同的项目中使用,但它遵循ASP.NET Core注册和配置Middleware@SaiGummaluri我没有必要推迟注册。。。可能使用Configure中的UseSitemap extension方法添加站点地图中间件,使用ConfigureServices中的AddSitemap extension添加站点地图服务和其他站点地图配置。。。这有意义吗?我只是尝试创建一个站点地图组件,用于不同的项目,但它遵循ASP.NET Core注册和配置MiddlewareHi的指导原则。只是一个友好的提醒。对于这个问题仍然没有公认的答案。你还需要别的吗?
services.AddScoped<ISitemapService, SitemapService>();