如何解决如何将LinkGenerator添加到ASP.NET Core?
如何通过Startup.cs LinkGenerator
方法将IServiceCollection
对象添加到我的ConfigureServices
中以进行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 servides将被注册,而当您在program.cs方法中运行 .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); });
时,该代码将被调用。
因此,如果您将asp.net核心应用程序配置为Web主机,则无需在ConfigureServices方法中再次调用services.AddRouting();
方法。该服务将在startup.cs的ConfigureServices方法之前注册。
您可以参考下面的source codes来了解如何在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>();
//....
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。