2011-03-31 62 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