У меня точно такой же сценарий, как описано в Именованный одноэлементный экземпляр в StructureMap (Несколько фабрик сеансов nHibernate)
Если я реализую это с помощью StructureMap 2.6.2 - отлично!
Однако в настоящее время мне приходится использовать StructureMap 2.5.4 из-за различных факторов, связанных с устаревшими проектами, которые не могут использовать новейшие версии .NET Framework, а также по ряду других причин. Предположим для этого вопроса, что я не могу обновиться в обозримом будущем.
2.5.4, очевидно, сильно отличается по синтаксису от 2.6.2, и я не могу понять, как реализовать то же самое, используя его API.
В частности, это такие штуки
For<ISessionFactory>().LifecycleIs(Lifecycles.GetLifecycle(InstanceScope.Singleton))
.Add(context => CreateSessionFactory(@"MyName")).Named("MySessionFactory");
For<ISession>().LifecycleIs(Lifecycles.GetLifecycle(InstanceScope.Hybrid))
.Add(context => context.GetInstance<ISessionFactory>("MySessionFactory").OpenSession()).Named("MyName");
For<ISessionFactory>().LifecycleIs(Lifecycles.GetLifecycle(InstanceScope.Singleton))
.Add(context => CreateSessionFactory(@"My2ndName")).Named("My2ndSessionFactory");
For<ISession>().LifecycleIs(Lifecycles.GetLifecycle(InstanceScope.Hybrid))
.Add(context => context.GetInstance<ISessionFactory>("MySessionFactory").OpenSession()).Named("My2ndName");
... с помощью метода CreateSessionFactory (string), который создает соответствующую конфигурацию.
«Добавить» и последующий «GetInstance» недействительны и требуют рефакторинга для работы с 2.5.4 - я слишком туп, чтобы понять, как, или действительно ли вы можете добиться того же.
Ваше здоровье