简体   繁体   English

Asp.Net Core - 访问 IStringLocalizer 实例形式 static class

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

Is there better way to inject IStringLocalizer object into static class so that I would not use method injection and pass localizer instance from view to the extension method each time?有没有更好的方法将IStringLocalizer object 注入 static class 以便我每次都不会使用方法注入并将定位器实例从视图传递到扩展方法?

Here's my view code这是我的视图代码

@using Microsoft.AspNetCore.Mvc.Localization

@inject IViewLocalizer Localizer

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

....

and extension method itself:和扩展方法本身:

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

Because of the static nature of the code being accessed, a service locator approach would need to be applied.由于所访问代码的 static 特性,需要应用服务定位器方法。

Resolve the desired type via the IHtmlHelper.ViewContext通过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]
    }
}

Which allows it to be used in the view这允许它在视图中使用

@Html.GetString("some key")

I using我用

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

I came across this result and wanted to pass on my own implementation as none of the previous answers helped me with my case.我遇到了这个结果并想传递我自己的实现,因为以前的答案都没有帮助我解决我的问题。

This solution doesn't use HtmlHelper in the method though.但是,此解决方案并未在该方法中使用 HtmlHelper。 You can change IStringLocalizer to IViewLocalizer.您可以将 IStringLocalizer 更改为 IViewLocalizer。 It is implemented on handling enums localization, but you get the thrill.它是在处理枚举本地化时实现的,但您会感到兴奋。

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