0

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

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

4

1 回答 1

0

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

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

如您所见,使用此方法,您可以注册一个Func<>接受容器本身的 a,以防您想要提取可能参与构建您传递给的服务类型的实例实现的任何依赖项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>
}

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

于 2013-08-23T10:04:34.530 回答