是否可以从控制器或管理器类添加服务,而不是ConfigureService方法

问题描述

我要使用

services.AddPredictionEnginePool<..>

当我使用“ IServiceCollection DI”时,我会在下面收到通知

无法实例化服务类型“ Microsoft.Extensions.DependencyInjection.IServiceCollection”的实现类型“ Microsoft.Extensions.DependencyInjection.IServiceCollection”。

我该如何使用;

services.AddPredictionEnginePool<..>

来自其他班级。

为什么要这么做;

使用该服务的原因是在运行时添加新对象。

解决方法

IServiceCollection是DI容器的配置;您不应该在运行时使用它。最多只能使用IServiceProvider(将其用作服务定位器),但是在使用DI时也可以将其视为反模式。

在没有更多关于您要完成的事情的上下文的情况下,我建议使用某种工厂类,该类知道如何在运行时创建这些对象(基于某些数据/配置),并将工厂注入到需要。

https://www.martinfowler.com/articles/injection.html