我正在开发一个多语言网站。我的解决方案,用于显示多语言文本,基于以下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;
}
}
答案 0 :(得分:1)
如你所知,Attribute类是由.NET框架创建的,所以我认为自动执行依赖注入是不可能的,你需要手动注入它。
使用此解决方案将属性注入构造对象:
答案 1 :(得分:0)
您必须覆盖ControllerActionInvoker类和InvokeActionMethodWithFilters方法,您可以使用windsor将依赖项注入实例化对象
编辑:意识到这是针对mvc的,不确定如何在webforms环境中进行此操作