使用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
的代码中。
我如何使IService
和ServiceImplementation
的请求提供相同的底层对象?
通过使用基于implementationFactory
的扩展方法,您可以在需要接口时返回IServiceProvider
的依赖关系图以获得实现,并且您甚至不会丢失编译时类型检查。
public void ConfigureServices(IServiceCollection services) {
services.AddScoped<ServiceImplementation>();
services.AddScoped<IService>(
provider => provider.GetService<ServiceImplementation>()
);
}
。