dependency-injection - 正确注入不适用于 Prism Unity
问题描述
我们有一个使用 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>();
任何人任何想法。谢谢
解决方案
基于类的名称,我认为它是一个实际的属性?这不能由 注入任何东西Unity
,因为容器只能注入到它自己创建的实例中。
但是,您可以通过绕道使用属性代码中的容器:CommonServiceLocator
. 这是一个静态类,仅在必要时才使用,这可能是极少数情况下它是个好主意的情况之一。您可以使用它IStringResource
在运行时从容器中解析。
推荐阅读
- powershell - 通过 Powershell 更改设置“StartWhenAvailable”
- android - 在 Android 中使用 adb 使用相同代码的唯一命名屏幕截图
- python - 针对 y Statsmodels 混合模型结果绘制 x
- java - Dozer 映射到没有默认构造函数的库类
- python - 没有找到 python_version 的本地包或工作下载链接(认为它存在)
- r - 如果 r 中的值相等,则通过求和来压缩行
- couchdb - 如何在数组大小上编写芒果过滤器?
- video-indexer - .mp4 视频的视频索引过程出错
- python - 我将如何检查我的机器人消息是否 <2000 字符长度
- javascript - Vue.js:如何观察 vuex 商店的深度变化?