2013-08-22 74 views
0

我只有Ninject IOC的經驗。如何使用Caliburn.MIcro綁定NHibernate ISessionFactory簡單的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(); 

我迷路了,所以我甚至不想提供我嘗試過的任何嘗試。

回答

0

看着你的代碼,它看起來像你試圖以Func<>代表的形式註冊工廠方法或工廠。

工廠或工廠方法可以使用SimpleContainerHandler<TService>(Func<SimpleContainer, object> handler)擴展方法如通過SimpleContainer類的documentation指出註冊。

如您所見,使用此方法,您可以註冊一個接受容器本身的Func<>,以防您想要拉取可能參與構建您傳遞給Hander<TService>的服務類型的實例實現的任何依賴項。

因此,在你的情況你的代碼可能會成爲類似以下內容:

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> 
} 

如果這並不爲你工作,請讓我知道。

相關問題