如何将NHibernate ISessionFactory与Caliburn.MIcro Simple IOC Container绑定

时间:2013-08-22 22:47:08

标签: nhibernate ioc-container caliburn.micro

我只有Ninject IOC的经验。

我正在转换为Caliburn.Micro进行WPF开发。喜欢它到目前为止。我已经开始使用他们的MEF样本并且喜欢灵活性。

无法弄清楚如何将此工作代码从Ninject绑定到Caliburn.Micros SimpleContainer。

kernel.Bind<Func<ISessionFactory>>().ToMethod(c =>
    () => Fluently.Configure()
          .Database(MsSqlCeConfiguration.Standard
          .Dialect<ImpactMsSqlCeDialect>()
          .ConnectionString(String.Format("Data Source={0}", "c:\\AppDB.sdf")))
          .Mappings(m => m.FluentMappings.AddFromAssemblyOf<ChildMap>())//.ExportTo(@"C:\fnh\"))
          .Mappings(m => m.FluentMappings.AddFromAssemblyOf<ClassMap>()) //.ExportTo(@"C:\fnh\")
          .Mappings(m => m.FluentMappings.AddFromAssemblyOf<ClassTypeMap>())
          .Mappings(m => m.FluentMappings.AddFromAssemblyOf<CustomerMap>())
          .Mappings(m => m.FluentMappings.AddFromAssemblyOf<EmployeeMap>())
          .Mappings(m => m.FluentMappings.AddFromAssemblyOf<PunchcardMap>())
          .Mappings(m => m.FluentMappings.AddFromAssemblyOf<PunchcardTypeMap>())
          .Mappings(m => m.FluentMappings.AddFromAssemblyOf<PunchMap>())
          //.ExposeConfiguration(cfg => new SchemaUpdate(cfg).Execute(false, true))
#if DEBUG
          .BuildConfiguration().SetInterceptor(new SqlStatementInterceptor())
#else
#endif
          .BuildSessionFactory()).InSingletonScope();

我迷路了,所以我甚至不想提供我尝试过的任何尝试。

1 个答案:

答案 0 :(得分:0)

查看您的代码,看起来您正试图以Func<>委托的形式注册工厂方法或工厂。

可以使用SimpleContainer扩展方法向Handler<TService>(Func<SimpleContainer, object> handler)注册工厂或工厂方法,如SimpleContainer类的 documentation 所述。

正如您所看到的,使用此方法,您可以注册一个接受容器本身的Func<>,以防您想要提取任何可能参与构建您传递给{{的服务类型的实例实现的依赖项。 1}}。

因此,在您的情况下,您的代码可能会变成以下内容:

Hander<TService>

如果这对您不起作用,请告诉我。