在扩展方法上注入 DI 服务
Injecting DI service on a extension method
我正在尝试在扩展方法中获取 IStringLocalizer
服务实例,这可能吗?关于如何注射它有什么建议吗?
我的目标是使用名称作为约定来翻译类型。
public static class I18nExtensions
{
private IStringLocalizer _localizer; // <<< How to inject it?
public static string GetName(this Type type)
{
return _localizer[type.Name].Value;
}
}
为什么不直接将 IStringLocalizer
作为参数传递:
public static string GetName(this Type type, IStringLocalizer localizer)
{
return localizer[type.Name].Value;
}
扩展方法的目的是扩展对象的行为。在我看来,这就是您要在这里做的事情。
按照 我走错了路,我最终创建了以下服务:
public class TypeNameLocalizer : ITypeNameLocalizer
{
private IStringLocalizer localizer;
public TypeNameLocalizer(IStringLocalizer<Entities> localizer)
{
this.localizer = localizer;
}
public string this[Type type]
{
get
{
return localizer[type.Name];
}
}
}
来源:@NightOwl888
我正在尝试在扩展方法中获取 IStringLocalizer
服务实例,这可能吗?关于如何注射它有什么建议吗?
我的目标是使用名称作为约定来翻译类型。
public static class I18nExtensions
{
private IStringLocalizer _localizer; // <<< How to inject it?
public static string GetName(this Type type)
{
return _localizer[type.Name].Value;
}
}
为什么不直接将 IStringLocalizer
作为参数传递:
public static string GetName(this Type type, IStringLocalizer localizer)
{
return localizer[type.Name].Value;
}
扩展方法的目的是扩展对象的行为。在我看来,这就是您要在这里做的事情。
按照
public class TypeNameLocalizer : ITypeNameLocalizer
{
private IStringLocalizer localizer;
public TypeNameLocalizer(IStringLocalizer<Entities> localizer)
{
this.localizer = localizer;
}
public string this[Type type]
{
get
{
return localizer[type.Name];
}
}
}
来源:@NightOwl888