属性注入不适用于Prism Unity

问题描述 投票:0回答:1

我们有一个使用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-injection prism unity-container
1个回答
0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.