在 ASP.NET Core MVC 中,依赖注入 (DI) 机制用于管理应用程序依赖项的创建和生命周期。ConfigureServices
方法通常用于注册依赖项,但它最初只创建一个 IServiceCollection
,该集合充当 DI 容器的蓝图。
要手动解析服务实例,我们需要获取一个 IServiceProvider
,它包含完全组合的容器。有几种方法可以实现这一点:
将服务注入 Startup
类的构造函数允许在 ConfigureServices
方法中直接访问内置服务,例如 IConfiguration
:
<code class="language-csharp">public class Startup { public Startup(IConfiguration configuration) { Configuration = configuration; } public IConfiguration Configuration { get; } public void ConfigureServices(IServiceCollection services) { // 在此处使用 Configuration } }</code>
在 Configure
方法中,IApplicationBuilder
提供对 IServiceProvider
的直接访问:
<code class="language-csharp">public void Configure(IApplicationBuilder app) { var serviceProvider = app.ApplicationServices; var hostingEnv = serviceProvider.GetService<IWebHostEnvironment>(); }</code>
要在 ConfigureServices
中直接解析依赖项,需要使用中间服务提供程序:
<code class="language-csharp">public void ConfigureServices(IServiceCollection services) { services.AddSingleton<IFooService, FooService>(); var sp = services.BuildServiceProvider(); var fooService = sp.GetService<IFooService>(); }</code>
通常不建议手动解析依赖项(服务定位器),因为它可能会降低可维护性和可测试性。尽可能优先注入依赖项。
以上是如何解析ConfigureServices中的ASP.NET Core DI实例?的详细内容。更多信息请关注PHP中文网其他相关文章!