我们有一个使用Prism(7.2.0.1422)和Unity作为DI容器的WPF应用程序。我在尝试使用Unity属性注入的以下类中
public class LocalizedDescriptionAttribute : DescriptionAttribute
{
[Dependency]
IStringResource _stringResource { get; set; }
string _resourceKey;
public LocalizedDescriptionAttribute(string resourceKey)
{
_resourceKey = resourceKey;
}
public override string Description
{
get
{
string description = _stringResource.GetString(_resourceKey);
return string.IsNullOrWhiteSpace(description) ? string.Format("[[{ 0}]]", _resourceKey) : description;
}
}
}
_stringResource is always null. I have registered the type as a singleton like this in RegisterTypes
containerRegistry.RegisterSingleton<IStringResource, StringResource>();
任何想法。 谢谢
答案 0 :(得分:1)
基于类的名称,我认为它是一个实际属性? Unity
不能注入任何东西,因为容器只能注入到它自己创建的实例中。
但是,您可以通过绕行使用CommonServiceLocator
来使用属性代码中的容器。那是一个静态类,仅在必要时才使用,这可能是一个好主意的罕见情况之一。您可以使用它在运行时从容器中解析IStringResource
。