autofacc:如何分离多个插件

本文关键字:插件 分离 何分离 autofacc | 更新日期: 2023-09-27 18:17:15

我得到了一个生成不同格式输出的项目。架构是这样的:

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

Xyz。格式和……格式依赖于…Runner依赖于一切

现在Core公开了各种接口,例如

IFormatSpecifics
IWriter
IFormatWorker`

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

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

现在我的问题是:什么是正确的机制,使它的实现IFormatWorker在Xyz。FormatA从Xyz内部获得iformatdetails、IWriter等的实现。与FormatB类似。从我的阅读来看,我认为正确的方法必须与使用模块(每种格式一个)和关键服务有关。另一方面,我在stackflow (https://stackoverflow.com/a/26798803/2105891)上也看到了一个参考,它似乎表明对于类似插件的场景,单独的容器可能是正确的。

编辑:多租户注册也可能是正确的事情,从我读到-只是我没有任何默认值。

谢谢,马克斯

autofacc:如何分离多个插件

我为autofacc写了一个小插件来做我需要的事情。它可以作为nuget包获得:https://www.nuget.org/packages/Autofac.Extras.Plugins/

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

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

欢迎反馈和贡献。

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