在 AspnetCore 中向 IServiceCollection 注册第三方容器是错误的吗?

本文关键字:错误 中向 AspnetCore IServiceCollection 注册 第三方 | 更新日期: 2023-09-27 17:56:51

一点背景:我开始将FluentValidation合并到AspnetCore应用程序中,在那里我使用SimpleInjector作为我选择的DI。根据 aspnet 文档

"配置服务方法通常返回 void,但如果其 签名已更改为返回 IServiceProvider,一个不同的容器 可以配置并返回"

这一切都很好,直到我意识到我需要配置不属于我的服务,这就是为什么该示例使用我想象containerBuilder.Populate(services);的原因。FluentValidation的好处是我可以创建自己的IValidatorFactory来解决我的验证器(这就是我的问题来源,因为我的验证器是在 SimpleInjector 注册的,而不是认为我没有的默认容器)。我想我可以通过向IServiceCollection注册 SimpleInjection 器的container并将其作为IServiceProvider注入我的IValidatorFactory而不是以 ConfigureServices 方法返回容器来解决这个令人头疼的问题。似乎这一切都可以作为黑客,但这是要走的路吗?除了 aspnet 文档维基之外,还有其他方法吗?

参考资料: https://github.com/JeremySkinner/FluentValidation/blob/master/src/FluentValidation.AspNetCore/ServiceProviderValidatorFactory.cs

https://docs.asp.net/en/latest/fundamentals/dependency-injection.html

在 AspnetCore 中向 IServiceCollection 注册第三方容器是错误的吗?

Simple Injector 和 ASP.NET Core DI 抽象之间存在根本的不兼容性(即无法解决的不兼容性),并且通常与Microsoft提出的抽象存在许多问题。

因此,我们的官方建议是:

避免使用自行开发或第三方提供的适配器进行 .NET Core DI 抽象。将应用程序组件的注册与框架和第三方组件隔离开来。追求可靠的工作方式,并允许您的应用程序注册由Simple Injector验证和诊断,而不必担心与框架和第三方组件的不兼容。

您可以在此处详细了解在使用第三方容器时应如何使用 ASP.NET Core。