StructureMap получает зарегистрированные типы, а не экземпляры - PullRequest
9 голосов
/ 13 апреля 2011

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

Они выбирают тип плагина из списка выбора,Я использую StructureMap для ввода IEnumerable в мой контроллер MVC, чтобы затем получить доступ к имени типа FQ для использования в списке выбора.

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

Итак, вопрос в том, могу ли я получить доступ к типам IPlugin, которые зарегистрированы с StructureMap?

1 Ответ

14 голосов
/ 13 апреля 2011

Вы должны иметь возможность получить информацию об экземпляре, используя свойство Model контейнера:

IContainer container = ObjectFactory.Container;
IEnumerable<InstanceRef> instances = container.Model.AllInstances.
  Where(i => i.PluginType.Equals(typeof(IPlugin)));

Вы можете получить доступ к типу Concrete, используя:

foreach(var instanceRef in instances)
  Console.WriteLine(instanceRef.ConcreteType);
...