使用ASP对两个服务使用相同的实现.. NET依赖注入

本文关键字:实现 注入 依赖 NET 服务 ASP 两个 使用 | 更新日期: 2023-09-27 18:15:31

我有一个ServiceLifetime.Scoped依赖项,我只希望每个web请求创建一次,但它需要满足两个服务的请求。其中一个是实现实现的接口,另一个是实现本身。现在我基本上是这样做的:

public interface IService {}
public class ServiceImplementation : IService {
    public Object ImplementationSpecificState;
}
public void ConfigureServices(IServiceCollection services) {
    services.AddScoped<IService, ServiceImplementation>();
    services.AddScoped<ServiceImplementation>();
}

不幸的是,这给了我两个不同的对象与每个web请求。一个在依赖ServiceImplementation的代码中,另一个在依赖IService的代码中。

我如何使IServiceServiceImplementation的请求提供相同的底层对象?

使用ASP对两个服务使用相同的实现.. NET依赖注入

通过使用基于implementationFactory的扩展方法,您可以在需要接口时返回IServiceProvider的依赖关系图以获得实现,并且您甚至不会丢失编译时类型检查。

public void ConfigureServices(IServiceCollection services) {
    services.AddScoped<ServiceImplementation>();
    services.AddScoped<IService>(
        provider => provider.GetService<ServiceImplementation>()
    );
}