Можно ли временно зарегистрировать компоненты в контейнере Autofac? - PullRequest
5 голосов
/ 13 октября 2011

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

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

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

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

Как я могу соединить 2 контейнера, чтобы разрешить вызовы до контейнера области приложения?

Есть ли какие-либо ошибки, о которых следует знать при таком подходе? Я предполагаю, что могут быть проблемы с временем жизни компонента ...

Редактировать: Теперь я провел немного больше исследований и испытаний, и оказалось, что я могу просто использовать перегрузку BeginLifetimeScope (Action ) для регистрации предоставленных экземпляров приложения-хоста для вложенного только на всю жизнь. По какой-то причине я подумал, что добавление регистраций к вложенному времени жизни приведет к их добавлению в корневой контейнер, но, похоже, это не так.

1 Ответ

3 голосов
/ 14 октября 2011

Как отмечалось в моем редактировании выше, оказывается, что BeginLifetimeScope (Action ) - это именно то, что мне нужно.По какой-то причине я подумал, что добавление регистраций к вложенному времени жизни приведет к тому, что они будут добавлены в корневой контейнер и, следовательно, будут разрешены после окончания вложенной области действия времени, но, похоже, это не так.

...