Как создать ServiceCollection из ServiceProvider? - PullRequest
0 голосов
/ 02 декабря 2018

Я строю реализацию сервиса, используя этот метод:

Sample image

Я использую Microsoft.Extensions.DependencyInjection и пытаюсь добиться следующего:

  • Создать локальную коллекцию ServiceCollection и оставить исходный ServiceProvider (и базовый ServiceCollection) нетронутым
  • Зарегистрировать текущий тип (TViewModel) для локальной ServiceCollection
  • Добавить все службыparent IServiceProvider (созданный из другого ServiceCollection) обеспечивает локальную ServiceCollection.
  • использует локальную ServiceCollection для создания локального ServiceProvider, который может предоставить экземпляр типа, который я выполняю в данный момент.

Я тут что-то сумасшедший делаю?Мне кажется, что я делаю что-то странное здесь, поскольку API для него не существует для инициализации ServiceCollection из другого ServiceProvider.

Примечание

Я нехотите запустить serviceCollection.AddX для исходной коллекции ServiceCollection.

1 Ответ

0 голосов
/ 02 декабря 2018

Как создать ServiceCollection из ServiceProvider?

Краткий ответ: Вы не можете из коробки

Один разпоставщик услуг построен, любые изменения в наборе услуг не влияют на поставщика.

Класс ServiceProvider, который в конечном итоге создается, не предоставляет никакого способа получить коллекцию, которая использовалась для его создания.

Я бы посоветовал вам просто сохранить ссылку на исходную коллекцию и создать нового поставщика по мере необходимости, если в исходную коллекцию были внесены изменения.

В противном случае вам потребуется создать собственную IServiceProviderFactory<TContainerBuilder>

Предоставляет точку расширения для создания конструктора, специфичного для контейнера, и IServiceProvider.

, который обладает желаемой функциональностью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...