1

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

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

Xyz.FormatA 和 ...FormatB 都依赖于 ...Core。跑步者取决于一切。

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

IFormatSpecifics
IWriter
IFormatWorker`

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

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

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

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

谢谢,马克斯

4

1 回答 1

0

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

源代码可以在 https://github.com/ModernRonin/Autofac.Extras.Plugins找到

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

欢迎反馈和贡献。

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

于 2017-01-06T04:24:17.703 回答