c# - 使用 Controller 方法注入(inject) Dotnet 核心方法

标签 c# asp.net-core dependency-injection .net-core

假设我在 dotnet 核心中有以下 Controller :

[Route("api/v1/[controller]")]
public class ValuesController : Controller
{
    private readonly IHandler<ValuesRequest, ValuesResponse> _valueHandler;
    private readonly IHandler<ValuesIdRequest, ValuesIdResponse> _valueIdHandler;

    public ValuesController(IHandler<ValuesRequest, ValuesResponse> valueHandler, 
                            IHandler<ValuesIdRequest, ValuesIdResponse> valueIdHandler)
    {
        _valueHandler = valueHandler;
        _valueIdHandler = valueIdHandler;
    }

    [HttpGet]
    public ValuesResponse Get(ValuesRequest request)
    {
        return _valueHandler.Handle(request);
    }

    [HttpGet("{id}")]
    public ValuesIdResponse Get(ValuesIdRequest request)
    {
        return _valueIdHandler.Handle(request);
    }
}

正如您在上面的代码中看到的,我通过构造函数使用了依赖注入(inject)。但是,我在考虑如何减少代码量。所以,我在考虑使用方法注入(inject),它应该将代码简化为如下所示:

[Route("api/v1/[controller]")]
public class ValuesController : Controller
{
    [HttpGet]
    public ValuesResponse Get(ValuesRequest request, IHandler<ValuesRequest, ValuesResponse> handler)
    {
        return handler.Handle(request);
    }

    [HttpGet("{id}")]
    public ValuesIdResponse Get(ValuesIdRequest request, IHandler<ValuesIdRequest, ValuesIdResponse> handler)
    {
        return handler.Handle(request);
    }
}

我想知道是否可以结合 Controller 参数来做这样的事情。我尝试在网上寻找答案,但找不到类似的问题/解决方案。

最佳答案

引用 Action Injection with FromServices

Sometimes you don't need a service for more than one action within your controller. In this case, it may make sense to inject the service as a parameter to the action method. This is done by marking the parameter with the attribute [FromServices] as shown here:

public ValuesResponse Get(ValuesRequest request, [FromServices]IHandler<ValuesRequest, ValuesResponse> handler)
{
    return handler.Handle(request);
}

关于c# - 使用 Controller 方法注入(inject) Dotnet 核心方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51671569/

相关文章:

scala - Scaldi 依赖注入(inject)和 Akka Actors

c# - 从 Outlook 加载项调用时,NLog 不写入日志文件

c# - 字符串变量可以设置多少个字符?

apache - 为什么我应该将代理服务器与 Kestrel 一起使用?

asp.net-core - 确认电子邮件地址时 token 无效 - Asp.Net Core

python - Python 中的依赖注入(inject)容器是否有意义?

c# - 通过取色排除图像的一部分

c# - AWS LAMBDA 使用 SqlConnection 连接到 RDS SQL 数据库

c# - 使用 ASP.net 核心(API Controller )处理基础 Controller 中的异常

c# - MEF构造函数注入(inject)