在扩展方法上注入DI服务

时间:2017-02-14 20:50:28

标签: c# dependency-injection asp.net-core extension-methods

我试图在扩展方法中获取IStringLocalizer服务实例,是否可能?关于我应该如何注射它的任何建议?

我的目标是使用其名称将类型转换为约定。

public static class I18nExtensions
{

    private IStringLocalizer _localizer; // <<< How to inject it?

    public static string GetName(this Type type)
    {
        return _localizer[type.Name].Value;
    }
}

2 个答案:

答案 0 :(得分:4)

关注@NightOwl888 comment我走错了路,最后创建了以下服务:

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

答案 1 :(得分:1)

为什么不将IStringLocalizer作为参数传递:

public static string GetName(this Type type, IStringLocalizer localizer)
{
    return localizer[type.Name].Value;
}

扩展方法的目的是扩展对象的行为。在我看来,这就是你在这里要做的事情。