Autofac:如何分离多个插件

Autofac: How to separate multiple plugins

我有一个项目可以生成不同格式的输出。 架构大概是这样的:

Xyz.Core
Xyz.FormatA
Xyz.FormatB
Xyz.Runner`

Xyz.FormatA 和...FormatB 都依赖于...Core。 跑者靠一切

现在Core暴露了各种接口,例如

IFormatSpecifics
IWriter
IFormatWorker`

等等,还有一些抽象的 类。 FormatA 和 FormatB 都包含 IFormatWorker 的实现(这是一种格式特定的根对象,并没有真正这样称呼,这个例子只是我需要做的事情的抽象)和其他的,主要是从 abstract 类 在 Core 中已经完成了部分工作。 Runner 只是实例化具体的 IFormatWorker 并让它们完成它们的工作。

到目前为止,所有这些都是在没有任何 IOC 容器的情况下进行的。现在我想改用 Autofac。

现在我的问题是:使 Xyz.FormatA 中的 IFormatWorker 的实现从 Xyz.FormatA 内部获得 IFormatSpecifics、IWriter 等的实现的正确机制是什么,以及类似的对于格式 B。 根据我的阅读,我认为正确的方法必须与使用模块(每种格式一个)和键控服务有关。另一方面,我在这里也看到了关于 stackflow () 的参考,这似乎表明对于类似插件的场景,单独的容器可能是正确的。

编辑:根据我的阅读,多租户注册也可能是正确的——只是我没有任何默认值。

谢谢, 最大值

我为 Autofac 写了一个小插件来做我需要的。 它作为 nuget 包提供:https://www.nuget.org/packages/Autofac.Extras.Plugins/

来源可以在 https://github.com/ModernRonin/Autofac.Extras.Plugins

基本上,它使用键控服务,但隐藏了这个特定用例的一些复杂性。

欢迎提供反馈和贡献。

PS:我希望在 SO 上用一个工作的 nuget 包回答是好的,即使我自己写的 :)