2011-03-31 68 views
0

我有確切相同的情況下如果我實現這個使用StructureMap 2.6.2爲Named singleton instance in StructureMap (Multiple nHibernate session factories)命名的單一實例中StructureMap多NHibernate的會議工廠(StructureMap 2.5.4)

描述 - 太棒了!

但是,由於遺留項目中涉及的各種因素無法使用最新的.NET框架版本以及其他一些原因,我必須使用StructureMap 2.5.4。假設這個問題我不能爲可預見的未來升級。

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(串)創建的相關配置方法。

「Add」和後續的「GetInstance」是無效的,需要重構才能使用2.5.4 - 我太愚蠢了,無法解決問題,或者確實可以實現同樣的目標。

乾杯

+0

我應該補充說,通過使用「使用」和「WithName」 - 它不能正常工作 - 這是我想的第一件事。 – SpaceBison 2011-03-31 13:30:16

回答

3

爲了記住你的語法應該在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"); 
    }); 
+0

謝謝 - 這正是我想要的。 – SpaceBison 2011-04-06 14:31:38