Как разрешить тип на основе значения конфигурации конечного пользователя?

У меня есть интерфейс (назовите его IAcmeService), который имеет несколько реализаций.

FileSystemAcmeService
DatabaseAcmeService
NetworkAcmeService

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

В настоящее время я настраиваю свой контейнер IOC (Unity) для регистрации всех известных реализаций с именем.

container.RegisterType(of IAcmeService, FileSystemAcmeService)("FileSystemAcmeService")
container.RegisterType(of IAcmeService, DatabaseAcmeService)("DatabaseAcmeService")
container.RegisterType(of IAcmeService, NetworkAcmeService)("NetworkAcmeService")

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

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

Private _service as IAcmeService
Public Sub Initialize()
    _service = container.Resolve(of IAcmeService)(_config.AcmeServiceName)
End Sub

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

Существуют ли другие способы разрешить выбор конечного пользователя без знания класса о контейнере?

Ответы на вопрос(1)

Ваш ответ на вопрос