StructureMap - настроить тип по умолчанию для плагина, но может быть переопределен? - PullRequest
0 голосов
/ 30 марта 2011

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

Допустим, у меня есть MyAssembly.dll, в котором есть реестр, который устанавливает это: For<IBar>().Use<BarImpl>();

Если конкретному клиенту нужна другая функциональность, я хочу поместить MyAssembly.CustomerA.dll в папку bin приложения. Его реестр будет похож: For<IBar>().Use<CustomerABarImpl>();

Конфигурация в MyAssembly.CustomerA.dll должна ВСЕГДА переопределять конфигурацию.

Я читал, что профили могут это делать, но, похоже, это означает, что мне нужно установить, какой профиль должно использовать приложение. Я бы предпочел нет, если смогу; присутствие MyAssembly.CustomerA.dll должно быть достаточно.

Теперь этот вопрос похож: Используя StructureMap, когда конкретный тип по умолчанию определен в одном реестре, его можно переопределить в другом реестре?

Но я не хочу оставлять это на «то, что StructureMap находит последним».

Можно ли это сделать?

Ответы [ 2 ]

0 голосов
/ 31 марта 2011

Зарегистрируйте экземпляр по умолчанию перед сканированием реестров.

0 голосов
/ 30 марта 2011

Профили немного сбивают с толку, я не верю, что они будут хорошо работать в этой ситуации. Похоже, вам нужен метод, который говорит: «используйте это по умолчанию, если не зарегистрирован какой-либо другой конкретный тип».

Я не знаю, как это сделать, но вы можете убедиться, что ваши типы переопределения зарегистрированы последними. Мне нужно увидеть вашу конфигурацию, чтобы получить точную картину, но идея будет в том, чтобы позвонить в Initialize и настроить все, кроме ваших специфических для клиента вещей. Затем вызовите Configure и просмотрите дополнительные сборки. Таким образом, все ваши базовые типы будут по умолчанию, если вы не добавили другую реализацию для этого интерфейса в отдельную сборку.

...