在ASP.NET Core的ConfigureServices
方法中手动解析服务
ASP.NET Core使用IServiceCollection
接口构建依赖注入(DI)容器。构建完成后,它被组合成一个IServiceProvider
实例,允许您解析服务。本文指导如何在ConfigureServices
方法中手动解析实例。
注入依赖项
ConfigureServices
方法不允许服务注入,因此您可以将服务注入到Startup
类的构造函数中,例如IConfiguration
、IWebHostEnvironment
和ILoggerFactory
。
<code class="language-csharp">public Startup(IConfiguration configuration) => Configuration = configuration; public void ConfigureServices(IServiceCollection services) => services.AddScoped<IFooService>();</code>
在Configure()
中手动解析依赖项
您可以使用IApplicationBuilder
的ApplicationServices
属性在Configure()
方法中手动解析服务:
<code class="language-csharp">public void Configure(IApplicationBuilder app) { var serviceProvider = app.ApplicationServices; var fooService = serviceProvider.GetService<IFooService>(); }</code>
在ConfigureServices()
中手动解析依赖项
要在ConfigureServices
中解析服务,请使用BuildServiceProvider()
构建一个中间IServiceProvider
来访问到那时为止注册的服务:
<code class="language-csharp">public void ConfigureServices(IServiceCollection services) { services.AddSingleton<IFooService>(); var sp = services.BuildServiceProvider(); var fooService = sp.GetService<IFooService>(); }</code>
警告:
避免在ConfigureServices
中解析服务,因为它应该专注于配置应用程序服务。考虑手动将值从IConfiguration
绑定到实例,或者使用AddSingleton
/AddScoped
/AddTransient
的重载来延迟创建实例。
手动解析服务(服务定位器)是一种反模式,应该谨慎使用。
以上是如何在 ASP.NET Core 的'ConfigureServices”方法中手动解析服务?的详细内容。更多信息请关注PHP中文网其他相关文章!