我有两个Orchard模块。
两者都有IAppSettings
的实现,它在外部dll中定义,并通过nuget包在模块中引用(所以我不能使用IDependency
)。
我在每个模块中使用Autofac Module类连接它们。
不幸的是,这导致"最后的注册胜利"并且这两个模块将使用最后注册的实现,即使"期望"结果是每个人都使用自己的。
要明确的是,每个模块都是由一个单独的团队开发的,他们不会相互协调,但确实使用相同的模块创建指南。上面的例子只是这种情况的一个例子,但公平地假设会有更多。
我如何确保每个团队都可以为自己的模块注册自己的依赖项,而无需经常与其他模块的作者联系?
答案 0 :(得分:1)
每个租户有一个Autofac容器,而不是每个(Orchard)模块。你看到了这个含义。
然而,由于依赖关系将限定为扩展,因此模块之间的交互将受到严重阻碍,因此情况可能不同。
DI的另一个要点是你可以覆盖实现:这里也是需要的,因为如果你在模块A中实现依赖,那么也在模块B中(模块B依赖于模块A)然后模块B可以覆盖默认实现。这是一件好事。
您可以实现策略模式,而不是要求您的接口具体实现什么样的失败DI。但如果你告诉我更多细节,我可以提供更多帮助。