DryIoc Constructor Аргумент используется повторно - PullRequest
0 голосов
/ 11 января 2019

У меня есть Container, который регистрирует класс Presenter для представления:

Container.Register<ListCellPresenter>();

Конструктор Presenter принимает один аргумент для своего представления:

public ListCellPresenter(ListCellView view) {
     this.view = view;
}

И у меня есть View, который разрешает экземпляр Presenter, передавая себя в качестве аргумента для конструктора:

Container.Resolve<ListCellPresenter>(new object[] {this});

На главном экране у меня есть несколько экземпляров этого View, каждый из которых нуждается в своем собственном экземпляре Presenter. Эта часть работает.

Однако, похоже, что DryIoc постоянно использует первый объект, полученный во время выполнения, для удовлетворения аргумента конструктора. Каждый новый экземпляр Presenter получает первый экземпляр View, когда желательно, чтобы каждый из них получал уникальные экземпляры.

Я пробовал различные комбинации примеров, которые я нашел в документах, включая:

  • Регистрация в RegisterDelegate, где делегат явно использует Args.Index<ListCellView>(0) для удовлетворения зависимости
  • Регистрация по стандарту Register с использованием Made.Of(() => new ListCellPresenter(Arg.Of<ListCellView>())
  • Разрешение с var getPresenter = Container.Resolve<Func<ListCellView, ListCellPresenter>>();, за которым следует presenter = getPresenter(this);

Буду признателен за любые советы или рекомендации.

Ответы [ 2 ]

0 голосов
/ 12 января 2019

Проблема действительно является ошибкой, и она была исправлена ​​в последних версиях предварительного просмотра: https://github.com/dadhi/DryIoc/issues/29

0 голосов
/ 11 января 2019

Я обнаружил, что открытие именованных областей делает то, что вам нужно.

var container = new Container();
container.Register<TargetClass>();
using (var scope = container.OpenScope("View_1"))
{
    var instanceA = scope.Resolve<TargetClass>(new[] { typeof(string) });    
}

using (var scope = container.OpenScope("View_2"))
{
    var instanceB = scope.Resolve<TargetClass>(new[] { typeof(int) });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...