0

我有两个果园模块。

两者都有实现IAppSettings,它在外部 dll 中定义,并通过 nuget 包在模块中引用(所以我不能使用IDependency)。

我在每个模块中使用 Autofac 模块类将它们连接起来。

不幸的是,这会导致“最后一次注册获胜”,并且两个模块都将使用最后一次注册的实现,即使“预期”的结果是每个模块都使用自己的。

需要明确的是,每个模块都是由一个单独的团队开发的,他们不相互协调,但使用相同的模块创建指南。上面的例子只是这种情况的一个例子,但可以公平地假设还会有更多。

我如何才能确保每个团队都可以为他们的模块注册自己的依赖项,而不必经常与其他模块的作者核对?

4

1 回答 1

1

每个租户有一个 Autofac 容器,而不是每个(Orchard)模块。你看到了这个的含义。

然而,这并没有太大的不同,因为如果将依赖关系限定为扩展,模块之间的交互将受到严重阻碍。

DI 的要点之一是您可以覆盖实现:这也是需要的,因为如果您在模块 A 中实现依赖项,那么也在模块 B 中(其中模块 B 依赖于模块 A)然后模块 B 可以覆盖默认实现。这是一件好事。

例如,您可以实现策略模式,而不是希望为您的接口要求特定的实现什么样的失败 DI。但是,如果您提供更多详细信息,我可以提供更多帮助。

于 2014-10-01T22:02:25.527 回答