Asp.Net Core - Доступ к экземпляру IStringLocalizer из статического класса - PullRequest
0 голосов
/ 04 октября 2019

Есть ли лучший способ внедрить IStringLocalizer объект в статический класс, чтобы я не использовал инъекцию метода и не передавал экземпляр локализатора из представления в метод расширения каждый раз?

Вот мой код вида

@using Microsoft.AspNetCore.Mvc.Localization

@inject IViewLocalizer Localizer

@Html.GetString("some key", Localizer)

....

и сам метод расширения:

public static class Extensions
{
    public static string GetString (this IHtmlHelper helper, string key, IViewLocalizer localizer)
    {
        return localizer[key]
    }
}

1 Ответ

0 голосов
/ 04 октября 2019

Из-за статического характера кода, к которому осуществляется доступ, необходимо применить подход поиска служб.

Разрешить требуемый тип с помощью IHtmlHelper.ViewContext

public static class Extensions {
    public static string GetString (this IHtmlHelper helper, string key) {
        IServiceProvider services = helper.ViewContext.HttpContext.RequestServices;
        IViewLocalizer localizer = services.GetRequiredService<IViewLocalizer>();
        return localizer[key]
    }
}

, который позволяетэто будет использоваться в представлении

@Html.GetString("some key")
...