簡體   English   中英

Asp.Net Core - 訪問 IStringLocalizer 實例形式 static class

[英]Asp.Net Core - Access IStringLocalizer instance form static class

有沒有更好的方法將IStringLocalizer object 注入 static class 以便我每次都不會使用方法注入並將定位器實例從視圖傳遞到擴展方法?

這是我的視圖代碼

@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]
    }
}

由於所訪問代碼的 static 特性,需要應用服務定位器方法。

通過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")

我用

  • 控制器viewbag = _localizer
  • 查看FilterDynamic.CustomeFieldDynamic(conditionTypeParam, ViewBag.test);
  • class static public static List<FieldTypeModel> CustomeFieldDynamic(int controlType, IJsonStringLocalizer localizer)

我遇到了這個結果並想傳遞我自己的實現,因為以前的答案都沒有幫助我解決我的問題。

但是,此解決方案並未在該方法中使用 HtmlHelper。 您可以將 IStringLocalizer 更改為 IViewLocalizer。 它是在處理枚舉本地化時實現的,但您會感到興奮。

public static string GetEnumString<T>(this IStringLocalizer<TRes> localizer, T _enum) where T : Enum
    {
        var type = _enum.GetType();

        var typeString = type.Name;
        var valueString = _enum.ToString();

        return localizer[$"{typeString}_{valueString}"];
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM