单个 ASP.net 应用程序中的多个 DI 框架

Multiple DI-frameworks in a single ASP.net application

是否有人知道是否可以在同一个应用程序中使用多个 DI 框架(例如 Unity 和 Ninject)。或者框架 "collide" 会互相影响吗?

一切皆有可能。但是有没有意义就是另一回事了。

您可以使用 DI 框架 1 创建一部分对象图,然后使用 DI 框架 2 创建另一部分对象图,然后您可以 wire/connect 手动创建两个对象图。

请注意,您可能不应该在 class 库(您的框架)中使用 DI 框架。 DI 框架(或 DI 容器)只能在应用程序内部使用(在 Composition Root)。

引自参考文章(Composition Root):

Only applications should have Composition Roots. Libraries and frameworks shouldn't.

因此,如果您只是构建某种框架(比如用于数据访问或电子邮件消息处理),那么您不应该使用任何 DI 容器(DI 和 DI 容器是不同的东西)。在您的框架中,您应该通过在构造函数中声明 class 的依赖项并确保此类依赖项是抽象的(例如声明为接口)来启用 D​​I。

您的框架的使用者随后将决定使用哪个 DI 容器(或者即使他们首先想要使用 DI 容器)。

在我看来,不使用 DI 容器更好(即使在应用程序中)。请参阅 this article 了解原因。