【问题标题】:How to bind NHibernate ISessionFactory with Caliburn.MIcro Simple IOC Container如何将 NHibernate ISessionFactory 与 Caliburn.MIcro 简单 IOC 容器绑定
【发布时间】:2013-08-22 22:47:08
【问题描述】:

我只有 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();

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

【问题讨论】:

    标签: nhibernate ioc-container caliburn.micro


    【解决方案1】:

    查看您的代码,您似乎正在尝试以Func&lt;&gt; 委托的形式注册工厂方法或工厂。

    工厂或工厂方法可以使用 Handler&lt;TService&gt;(Func&lt;SimpleContainer, object&gt; handler) 扩展方法注册到 SimpleContainer,如 SimpleContainer 类的 documentation 所述。

    如您所见,使用此方法您可以注册一个Func&lt;&gt;,它接受容器本身,以防您想要提取任何可能参与构建您传递给Hander&lt;TService&gt; 的服务类型的实例实现的依赖项。

    因此,在您的情况下,您的代码可能如下所示:

    SimpleContainer _container = new SimpleContainer();
    _container.Handler<Func<ISessionFactory>>( diContainer => {
        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>())
    
          // HERE YOU SHOULD RETURN A Func<ISessionFactory>
    }
    

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

    【讨论】:

      猜你喜欢
      • 2013-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-23
      • 2013-08-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多