首页 > 解决方案 > 正确注入不适用于 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>();

任何人任何想法。谢谢

标签: dependency-injectionprismunity-container

解决方案


基于类的名称,我认为它是一个实际的属性?这不能由 注入任何东西Unity,因为容器只能注入到它自己创建的实例中。

但是,您可以通过绕道使用属性代码中的容器:CommonServiceLocator. 这是一个静态类,仅在必要时才使用,这可能是极少数情况下它是个好主意的情况之一。您可以使用它IStringResource在运行时从容器中解析。


推荐阅读