Home >Backend Development >C++ >How Can I Manually Resolve ASP.NET Core Services in `ConfigureServices`?
Manually resolve the ASP.NET Core service in ConfigureServices
The ConfigureServices
method used to configure the dependency injection container in ASP.NET Core does not provide a direct method to resolve services. To manually resolve services from this method, an alternative approach is required.
Service Provider Pattern
To resolve services, ASP.NET Core uses the service provider pattern. Once the service collection is built, it is converted into a IServiceProvider
instance, allowing the services to be resolved.
Inject service provider
One way to resolve a service is to inject an IServiceProvider
instance into the constructor of the Startup
class. However, this method only provides access to limited necessary services injected by the hosting layer.
Using ApplicationServices
In the Configure
method, IApplicationBuilder
provides the ApplicationServices
attribute, which contains a service provider with access to all registered services.
<code class="language-csharp">public void Configure(IApplicationBuilder app) { var serviceProvider = app.ApplicationServices; var fooService = serviceProvider.GetService<IFooService>(); }</code>
Build an intermediate service provider
To resolve services in the ConfigureServices
method, an intermediate service provider can be built from a partially built collection of services. However, this only includes services registered before this time.
<code class="language-csharp">public void ConfigureServices(IServiceCollection services) { services.AddSingleton<IFooService, FooService>(); var sp = services.BuildServiceProvider(); var fooService = sp.GetService<IFooService>(); }</code>
Avoid manual parsing
Manually resolving services is generally not recommended as it violates dependency injection principles. Instead, use injection or leverage service provider injection in the Configure
method.
The above is the detailed content of How Can I Manually Resolve ASP.NET Core Services in `ConfigureServices`?. For more information, please follow other related articles on the PHP Chinese website!