0

我正在开发一个多语言网站。我基于以下 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;

    }

}
4

2 回答 2

1

正如你提到的,属性类是由.NET框架创建的,所以我相信不可能自动进行依赖注入,你需要手动注入。

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

温莎城堡注入构造对象的属性

于 2012-09-11T08:35:35.480 回答
0

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

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

于 2012-09-11T08:41:22.700 回答