【发布时间】:2018-08-03 19:39:26
【问题描述】:
假设我在 dotnet 核心中有以下控制器:
[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);
}
}
正如您在上面的代码中看到的,我通过构造函数使用依赖注入。但是,我正在考虑如何减少代码量。所以,我在考虑使用方法注入,它应该将代码简化为这样的:
[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);
}
}
我想知道是否可以结合控制器参数来做这样的事情。我尝试在网上寻找答案,但找不到类似的问题/解决方案。
【问题讨论】:
-
为什么不完全完全remove the controllers?
标签: c# asp.net-core dependency-injection .net-core