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