1

不知何故,我无法通过使用构造函数的实现将服务导出为开放泛型来使其工作。我试图将 [CompositionConstructor] 属性添加到它无济于事。它抛出类似的东西:

System.Composition.Hosting.CompositionFailedException : No importing constructor was found on type 'MyType'.

有任何想法吗?

4

1 回答 1

1

不幸的是,这是 System.Composition 库中的一个错误(在此处查看https://github.com/dotnet/corefx/issues/40094)。如我所见,这个 bug 被添加到 5.0 里程碑,意味着明年秋天。从我的角度来看,您有以下选择:

  1. 仅使用默认构造函数保留实现类。在这里您可以使用 AmbientServices.Instance.CompositionContainer.GetExport 来获取您需要的依赖项。我知道这不是最好的解决方案,但它应该有效。警告:如果该服务被标记为作用域,那么如果您依赖于其他作用域服务,您将无法获得它们的正确作用域。

  2. Kephas 版本 6.5.0 为 Kephas 组合带来了 Autofac 实现,其中的东西按预期工作。检查https://github.com/kephas-software/kephas/releases的源代码以获取最新版本并构建您需要的 nugets。我会尽快在 nuget 上发布测试版。

  3. 使用您选择的 DI 容器,为您使用的版本带来您自己的组合实现。您可以参考 Autofac 实现,尽管最新版本中有一些重大更改。选择 DI 容器时,请确保它支持开放的泛型、元数据以及支持 IExportFactory 接口的方式。

于 2019-08-23T10:50:47.597 回答