簡體   English   中英

如何將 LinkGenerator 添加到 ASP.NET Core?

[英]How to add LinkGenerator to ASP.NET Core?

如何在 Startup.cs ConfigureServices方法LinkGenerator對象添加到IServiceCollection for DI?

public MyService(LinkGenerator linkGenerator) { }

試過:

public static void AddLinkGenerator(this IServiceCollection services)
{
    services.AddHttpContextAccessor();
    services.AddSingleton<IActionContextAccessor, ActionContextAccessor>();
    services.AddScoped<IUrlHelper, UrlHelper>(implementationFactory =>
    {
        var actionContext = implementationFactory.GetService<IActionContextAccessor>().ActionContext;
        return new UrlHelper(actionContext);
    });
}

據我所知,當您調用services.AddRouting();時,LinkGenerator 服務將被注冊services.AddRouting(); 方法和此代碼將在您運行.ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); });時調用.ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); }); 在 program.cs 方法中。

所以如果你使用configure asp.net core應用程序作為web主機,就不需要調用services.AddRouting(); 方法再次在您的 ConfigureServices 方法中。 這個服務會在startup.cs的ConfigureServices方法之前注冊。

您可以參考以下源代碼以了解它是如何在 RoutingServiceCollectionExtensions 類中注冊的。

注意:由於 DefaultLinkGenerator 是內部類,我們不能使用services.TryAddSingleton<LinkGenerator, DefaultLinkGenerator>(); 只需注冊 LinkGenerator 類。

public static IServiceCollection AddRouting(this IServiceCollection services)
    {
          //....
         // Link generation related services
        services.TryAddSingleton<LinkGenerator, DefaultLinkGenerator>();
        services.TryAddSingleton<IEndpointAddressScheme<string>, EndpointNameAddressScheme>();
        services.TryAddSingleton<IEndpointAddressScheme<RouteValuesAddress>, RouteValuesAddressScheme>();
        services.TryAddSingleton<LinkParser, DefaultLinkParser>();

          //....
     }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM