不能在 Kephas 的开放式通用服务中使用构造函数
Cannot use constructors in open generic services with Kephas
不知何故,我无法让它工作,将服务导出为开放通用的,并带有构造函数的实现。我试图将 [CompositionConstructor] 属性添加到它无济于事。它抛出类似:
System.Composition.Hosting.CompositionFailedException : No importing constructor was found on type 'MyType'.
有什么想法吗?
不幸的是,这是 System.Composition 库中的错误(检查此处 https://github.com/dotnet/corefx/issues/40094)。如我所见,这个错误被添加到 5.0 里程碑,意味着明年秋天。从我的角度来看,您有以下选择:
仅使用默认构造函数实现 class。这里可以使用AmbientServices.Instance.CompositionContainer.GetExport来获取你需要的依赖。我知道这不是最好的解决方案,但它应该有效。警告:如果该服务被标记为作用域,那么如果您依赖于其他作用域服务,您将无法获得它们的正确作用域。
Kephas 版本 6.5.0 为 Kephas 组合带来了 Autofac 实现,其中一切都按照预期的方式工作。检查 https://github.com/kephas-software/kephas/releases 的来源以获取最新版本并构建您需要的 nugets。我会尽快尝试在 nuget 上发布测试版。
使用您选择的 DI 容器,为您使用的版本带来您自己的组合实现。您可以将 Autofac 实现作为参考,尽管在最新版本中有一些重大更改。选择 DI 容器时,请确保它支持开放泛型、元数据以及支持 IExportFactory 接口的方法。
不知何故,我无法让它工作,将服务导出为开放通用的,并带有构造函数的实现。我试图将 [CompositionConstructor] 属性添加到它无济于事。它抛出类似:
System.Composition.Hosting.CompositionFailedException : No importing constructor was found on type 'MyType'.
有什么想法吗?
不幸的是,这是 System.Composition 库中的错误(检查此处 https://github.com/dotnet/corefx/issues/40094)。如我所见,这个错误被添加到 5.0 里程碑,意味着明年秋天。从我的角度来看,您有以下选择:
仅使用默认构造函数实现 class。这里可以使用AmbientServices.Instance.CompositionContainer.GetExport来获取你需要的依赖。我知道这不是最好的解决方案,但它应该有效。警告:如果该服务被标记为作用域,那么如果您依赖于其他作用域服务,您将无法获得它们的正确作用域。
Kephas 版本 6.5.0 为 Kephas 组合带来了 Autofac 实现,其中一切都按照预期的方式工作。检查 https://github.com/kephas-software/kephas/releases 的来源以获取最新版本并构建您需要的 nugets。我会尽快尝试在 nuget 上发布测试版。
使用您选择的 DI 容器,为您使用的版本带来您自己的组合实现。您可以将 Autofac 实现作为参考,尽管在最新版本中有一些重大更改。选择 DI 容器时,请确保它支持开放泛型、元数据以及支持 IExportFactory 接口的方法。