繁体   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