【问题标题】:How to add LinkGenerator to ASP.NET Core?如何将 LinkGenerator 添加到 ASP.NET Core?
【发布时间】:2020-08-25 03:00:48
【问题描述】:

如何在 Startup.cs ConfigureServices 方法中为我的IServiceCollection 添加LinkGenerator 对象?

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);
    });
}

【问题讨论】:

  • 你尝试了什么?
  • 这是在这里被问到的:stackoverflow.com/questions/56653105/… 看起来答案会起作用,但是有一些先决条件,唯一的答案没有解释(比如如何注入 IHttpContextAccessor

标签: c# asp.net-core dependency-injection


【解决方案1】:

据我所知,LinkGenerator 服务将在您调用services.AddRouting(); 方法时注册,并且当您在program.cs 方法中运行 .ConfigureWebHostDefaults(webBuilder =&gt; { webBuilder.UseStartup&lt;Startup&gt;(); }); 时将调用此代码。

因此,如果您将 asp.net 核心应用程序配置为 Web 主机,则无需在您的 ConfigureServices 方法中再次调用 services.AddRouting(); 方法。该服务将在 startup.cs 的 ConfigureServices 方法之前注册。

您可以参考下面的source codes 了解它是如何在 RoutingServiceCollectionExtensions 类中注册的。

注意:由于 DefaultLinkGenerator 是内部类,我们不能使用services.TryAddSingleton&lt;LinkGenerator, DefaultLinkGenerator&gt;(); 来注册 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>();

          //....
     }

【讨论】:

  • 这正是我想要的,非常感谢!除了 services.AddRouting() 我还需要添加对 services.AddLogging() 和 services.AddOptions() 的调用以添加所有必需的先决条件。
猜你喜欢
  • 2018-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-07
  • 1970-01-01
  • 2019-09-06
  • 1970-01-01
  • 2022-11-30
相关资源
最近更新 更多