Именованный одноэлементный экземпляр в StructureMap с несколькими фабриками сеансов nHibernate (StructureMap 2.5.4)

У меня точно такой же сценарий, как описано в Именованный одноэлементный экземпляр в 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 - я слишком туп, чтобы понять, как, или действительно ли вы можете добиться того же.

Ваше здоровье


person SpaceBison    schedule 31.03.2011    source источник
comment
Я должен был добавить это, используя Use и WithName - это не работает должным образом - это было первое, что я попробовал.   -  person SpaceBison    schedule 31.03.2011


Ответы (1)


Насколько я помню, ваш синтаксис должен работать в 2.5.4. Для 2.5.3 должен работать следующий синтаксис:

c.ForRequestedType<ISessionFactory>().CacheBy(InstanceScope.Singleton).
   AddInstances(
     x =>
     {
       x.ConstructedBy(() => CreateSessionFactory("MyName"))
         .WithName("MyName");
       x.ConstructedBy(() => CreateSessionFactory("My2ndName"))
         .WithName("My2ndName");
     });
person PHeiberg    schedule 04.04.2011
comment
Спасибо - это как раз то, что я хотел. - person SpaceBison; 06.04.2011