【问题标题】:Asp.Net Core - Access IStringLocalizer instance form static classAsp.Net Core - 从静态类访问 IStringLocalizer 实例
【发布时间】:2020-02-02 18:03:00
【问题描述】:
有没有更好的方法将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]
}
}
【问题讨论】:
标签:
c#
asp.net-core
dependency-injection
static-classes
asp.net-core-localization
【解决方案1】:
我遇到了这个结果并想传递我自己的实现,因为以前的答案都没有帮助我解决我的问题。
这个解决方案虽然没有在方法中使用 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}"];
}
【解决方案2】:
我用
- 控制器
viewbag = _localizer
- 查看
FilterDynamic.CustomeFieldDynamic(conditionTypeParam, ViewBag.test);
- 类静态
public static List<FieldTypeModel> CustomeFieldDynamic(int controlType, IJsonStringLocalizer localizer)
【解决方案3】:
由于所访问代码的静态特性,需要应用服务定位器方法。
通过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")