Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dependency injection 在ASP.NET核心中实例化控制器而不使用DI容器的正确方法是什么?_Dependency Injection_Asp.net Core - Fatal编程技术网

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;
    }
}