Prism IContainerProvider - Как разрешить неизвестное количество экземпляров? - PullRequest
0 голосов
/ 02 марта 2020

У меня есть приложение Prism WPF (использующее Unity), которое загружает несколько модулей, каждый из которых регистрирует объект, реализующий общий интерфейс.

Во время завершения работы я хочу, чтобы мое приложение могло разрешить все реализации интерфейса, которые были зарегистрированы всеми загруженными модулями.

Я понимаю, что каждый модуль может зарегистрировать отдельный модуль именованный экземпляр, например

container.RegisterType<IFoo, Foo1>("registration1");
container.RegisterType<IFoo, Foo2>("registration2");

Но мое приложение не знает ни о строках "registration1" или "registration2", ни его не волнует. Он даже не знает, какие модули будут загружены. Он просто хочет получить экземпляр интерфейса и вызвать функцию.

Есть ли способ, которым я могу попросить IContainerProvider "дать мне экземпляры каждой отдельной регистрации IFoo", не зная имен, используемых для зарегистрировать их?

1 Ответ

1 голос
/ 02 марта 2020

Есть ли способ попросить IContainerProvider «дать мне экземпляры каждой отдельной регистрации IFoo», не зная имен, использованных для их регистрации?

Если вы используете Unity как Контейнер, вы можете добавить IFoo[] и получить все именованные регистрации или IEnumerable<IFoo>, чтобы получить все именованные регистрации и по умолчанию.

Другие контейнеры могут / будут вести себя иначе. Контейнер-упаковщик Prism не обещает никакого поведения, поэтому вам придется заглянуть в документацию вашего контейнера.

Sidenote: не очень хорошая идея (в большинстве случаев) активно спрашивать контейнер, как звонить Resolve или ResolveAll.

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