C# Autofac:如何分离多个插件

C# Autofac:如何分离多个插件,c#,autofac,autofac-module,C#,Autofac,Autofac Module,我有一个项目生成不同格式的输出。 架构是这样的: Xyz.Core Xyz.FormatA Xyz.FormatB Xyz.Runner` Xyz.FormatA和…FormatB都依赖于…核心。 跑步者取决于一切 例如,现在Core公开了各种接口 IFormatSpecifics IWriter IFormatWorker` 等等,还有一些抽象类。 FormatA和FormatB都包含一个IFormatWorker的实现(这是一种特定于格式的根对象,并不是真正的根对象,这个示例只是我需要做

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

Xyz.Core
Xyz.FormatA
Xyz.FormatB
Xyz.Runner`
Xyz.FormatA和…FormatB都依赖于…核心。 跑步者取决于一切

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

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

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

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

编辑:从我读到的内容来看,多租户注册可能也是正确的——只是我没有任何默认设置

谢谢,
Max

我为Autofac编写了一个小插件,以满足我的需要。 它以nuget软件包的形式提供:

可在以下网址找到来源:

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

欢迎提供反馈和意见


PS:我希望在这里用一个正常工作的nuget软件包来回答这个问题很好,即使是我自己写的:)

我为Autofac编写了一个小插件,可以满足我的需要。 它以nuget软件包的形式提供:

可在以下网址找到来源:

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

欢迎提供反馈和意见


PS:我希望在这里用一个正常工作的nuget软件包来回答就可以了,所以,即使是我自己写的:)

我想多租户是你想要的,除非你想为每个插件指定每个依赖项。实际上,是的,每个插件实现所有依赖项(公共部分在抽象基类中)这可能会有帮助:我想多租户是你所追求的,除非你想为每个插件指定每个依赖项。实际上是的,每个插件实现所有依赖项(公共部分在抽象基类中)。这可能会有帮助: