RC1では、IUrlHelper
をサービスに挿入できます(スタートアップクラスでservices.AddMvc()
を使用)
これはRC2ではもう機能しません。 UrlHelper
を更新するにはActionContext
オブジェクトが必要なので、誰もRC2でそれを行う方法を知っていますか。それをコントローラーの外に出す方法がわかりません。
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);
}
次に、適切と思われる方法で使用します。
Net Core 2.の場合
service.AddMvc()
の後にこれを追加します
services.AddSingleton<IActionContextAccessor, ActionContextAccessor>();
services.AddScoped<IUrlHelper>(factory =>
{
var actionContext = factory.GetService<IActionContextAccessor>()
.ActionContext;
return new UrlHelper(actionContext);
});
ASP.NET Core 2.
インストール
PM> Install-Package AspNetCore.IServiceCollection.AddIUrlHelper
使用
public void ConfigureServices(IServiceCollection services)
{
...
services.AddUrlHelper();
...
}
免責事項:このパッケージの著者
.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);
});
ASP.Net Core 2.0の場合 IUrlHelperを挿入しないでください。コントローラのプロパティとして利用可能です。 ControllerBase.UrlはIUrlHelperインスタンスです。