Правильный впрыск не работает с Prism Unity - PullRequest
1 голос
/ 30 апреля 2020

У нас есть приложение WPF, использующее Prism (7.2.0.1422) и Unity в качестве контейнера DI. У меня есть следующий класс, где я пытаюсь использовать инъекцию Unity Property

  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>();

Любые идеи. Спасибо

1 Ответ

1 голос
/ 30 апреля 2020

Исходя из названия класса, я предполагаю, что это фактический атрибут? Unity не может ничего вставить, потому что контейнер может внедрять только в экземпляры, которые он сам создает.

Однако вы можете использовать контейнер из кода атрибута через обходной путь: CommonServiceLocator. Это класс c, который вы используете только в случае необходимости, и это может быть одним из редких случаев, когда это хорошая идея. Вы можете использовать его для разрешения IStringResource из контейнера во время выполнения.

...