web-dev-qa-db-ja.com

ASP.NET CoreへのIUrlHelperの注入

RC1では、IUrlHelperをサービスに挿入できます(スタートアップクラスでservices.AddMvc()を使用)

これはRC2ではもう機能しません。 UrlHelperを更新するにはActionContextオブジェクトが必要なので、誰もRC2でそれを行う方法を知っていますか。それをコントローラーの外に出す方法がわかりません。

28
RolandG

ASP.NET Core RC2の場合、 githubリポジトリでのこの問題 があります。 IUrlHelperを注入する代わりに、IUrlHelperFactoryを使用します。また、IActionContextAccessorがパブリックプロパティControllerを持たなくなったため、ActionContextを挿入する必要があるようです。

依存関係を登録します。

services.AddSingleton<IActionContextAccessor, ActionContextAccessor>();

その後、それに依存します。

public SomeService(IUrlHelperFactory urlHelperFactory,
                   IActionContextAccessor actionContextAccessor)
{

    var urlHelper =
        urlHelperFactory.GetUrlHelper(actionContextAccessor.ActionContext);
}

次に、適切と思われる方法で使用します。

38
David Pine

Net Core 2.の場合

service.AddMvc()の後にこれを追加します

services.AddSingleton<IActionContextAccessor, ActionContextAccessor>();
services.AddScoped<IUrlHelper>(factory =>
{
    var actionContext = factory.GetService<IActionContextAccessor>()
                                   .ActionContext;
    return new UrlHelper(actionContext);
});
19
frostymarvelous

ASP.NET Core 2.

インストール

PM> Install-Package AspNetCore.IServiceCollection.AddIUrlHelper

使用

public void ConfigureServices(IServiceCollection services)
{
   ... 
   services.AddUrlHelper();
   ... 
}

免責事項:このパッケージの著者

3
tchelidze

.Net Core 2.0の場合

services.AddMvc();

services.AddScoped<IUrlHelper>(x =>
{
   var actionContext = x.GetRequiredService<IActionContextAccessor>().ActionContext;
   var factory = x.GetRequiredService<IUrlHelperFactory>();
   return factory.GetUrlHelper(actionContext);
});
3

ASP.Net Core 2.0の場合 IUrlHelperを挿入しないでください。コントローラのプロパティとして利用可能です。 ControllerBase.UrlはIUrlHelperインスタンスです。

2