Можно ли временно регистрировать компоненты в контейнере Autofac?

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

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

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

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

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

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

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

5
задан Matt Siebert 13 October 2011 в 02:30
поделиться