向属性注入一些依赖项

时间:2012-09-11 08:21:19

标签: c# inversion-of-control castle-windsor ioc-container custom-attributes

我正在开发一个多语言网站。我的解决方案,用于显示多语言文本,基于以下LocalizedDisplayAttribute类。我想为这个类注入一些依赖。但是这个类是由.Net Framework实例化的。容器如何在不使用服务定位器的情况下注入依赖?

这是我的代码块

[AttributeUsage(AttributeTargets.All)]
public class LocalizedDisplayAttribute : DisplayNameAttribute
{
    public MultilanguageKeys Key { get; set; }
    public IMultilanguageManager MultilanguageManager { get; set; }              

    public LocalizedDisplayAttribute(IMultilanguageManager multilanguageManager)
    {
        this.MultilanguageManager = multilanguageManager;
    }

    public override string DisplayName
    {
        get
        {
         // Run some business   
         return GetCustomAttribute(Key);
        }
    }      

    private string GetCustomAttribute(MultilanguageKeys key)
    {
        int multiLanguageId = 3;            

        MultiLanguageDictionaryInfo multiLanguageDictionary = MultilanguageManager.DictionaryList()
                                                            .Where(t => t.Key == key.ToString())
                                                            .Where(t => t.MultilanguageId == multiLanguageId)
                                                            .FirstOrDefault();           

        return multiLanguageDictionary.Value;

    }

}

2 个答案:

答案 0 :(得分:1)

如你所知,Attribute类是由.NET框架创建的,所以我认为自动执行依赖注入是不可能的,你需要手动注入它。

使用此解决方案将属性注入构造对象:

Windsor castle Injecting properties of constructed object

答案 1 :(得分:0)

您必须覆盖ControllerActionInvoker类和InvokeActionMethodWithFilters方法,您可以使用windsor将依赖项注入实例化对象

编辑:意识到这是针对mvc的,不确定如何在webforms环境中进行此操作