[英]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.