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

时间:2016-10-28 23:17:57

标签: c# asp.net asp.net-core asp.net-core-mvc asp.net-core-1.0

我有一个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提供相同的基础对象?

1 个答案:

答案 0 :(得分:3)

通过使用implementationFactory-based extension method,您可以返回IServiceProvider的依赖关系图,以便在询问界面时获得实施,并且您甚至不会丢失编译时间类型检查。

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

花式。