Как уже упоминалось, вы бы хотели посмотреть Common Service Locator (CSL), который представляет собой простой фасад разрешения службы вокруг любого контейнера (любого по вашему выбору).
MVC3 внутренне интенсивно использует новый IDependencyResolver интерфейс, который в некоторой степени похож на CSL, но в контексте ASP.NET MVC. Хорошо, что если вы уже используете CSL, вы можете установить его как Respendency Resolver для MVC.
Эта тема одинаково важна для любого контейнера и не относится к StructureMap.
Итак, что там происходит:
- Вы предоставляете все необходимые регистрации контейнеров (предпочтительно через Registry DSL в случае StructureMap);
- Вы получаете адаптер StructureMap для Common Service Locator;
- Вы (опционально - если вам нужен CSL вместе с DependencyResolver) регистрируете свой адаптер StructureMap в качестве текущего локатора службы:
ServiceLocator.SetLocatorProvider(() => yourStructureMapAdapter)
- Вы регистрируете свой CSL (поддерживаемый StructureMap) как MVC DependencyResolver:
DependencyResolver.SetResolver(yourStructureMapAdapter)
- MVC3 автоматически подключает все через внутренний интерфейс IDependencyResolver (используя все возможности автоматического подключения StrucutreMap DI).
Наряду с возможностями встроенного IoC MVC3, максимально используйте возможности инструмента IoC (например, используйте сканирование сборок, доступное в StructureMap).