Dependency injection 在ASP.NET核心中实例化控制器而不使用DI容器的正确方法是什么?
在Dependency injection 在ASP.NET核心中实例化控制器而不使用DI容器的正确方法是什么?,dependency-injection,asp.net-core,Dependency Injection,Asp.net Core,在Startup.ConfigureServices中,我有一段代码: services.AddSingleton<IControllerActivator>(new LicenseKeyControllerActivator(keyService)); 在请求-响应生命周期中,activator创建控制器,基于DataAnnotations的验证工作,过滤器过滤,但从未调用任何控制器方法。事实上,在DTO上调用set后,会立即调用Release 我不确定这是控制器激活器问题还是控
Startup.ConfigureServices
中,我有一段代码:
services.AddSingleton<IControllerActivator>(new LicenseKeyControllerActivator(keyService));
在请求-响应生命周期中,activator创建控制器,基于DataAnnotations
的验证工作,过滤器过滤,但从未调用任何控制器方法。事实上,在DTO上调用set
后,会立即调用Release
我不确定这是控制器激活器问题还是控制器激活器问题。我不确定您试图实现的目标。默认情况下,控制器不是由ASP.NET核心DI解析的(请参阅),而是由控制器激活器的默认实现解析的。如果人们希望控制器由DI解决,他们需要明确地选择它。这绝对是一个路由问题,因为重写
IControllerActivator
是在ASP.NET核心中实践*纯DI的方法。是的,它是。路由因错误的ActionFilter而中断。抱歉,我将删除或关闭我自己的问题,因为该问题包含答案。
public class LicenseKeyControllerActivator
: IControllerActivator
{
private readonly ILicenseKeyService _keyService;
public LicenseKeyControllerActivator(ILicenseKeyService licenseKeyService)
{
_keyService = licenseKeyService;
}
public object Create(ControllerContext context)
{
return new LicenseController(_keyService);
}
public void Release(ControllerContext context, object controller)
{
return;
}
}