假設我在 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); }}我想知道是否可以結合控制器參數來做這樣的事情。我嘗試在網上找到答案,但是我找不到類似的問題/解決方案。
2 回答

白衣非少年
TA貢獻1155條經驗 獲得超0個贊
有時,您不需要為控制器中的多個操作提供服務。在這種情況下,將服務作為參數注入 action 方法可能是有意義的。這是通過使用屬性標記參數來完成的,
[FromServices]
如下所示:
public ValuesResponse Get(ValuesRequest request, [FromServices]IHandler<ValuesRequest, ValuesResponse> handler){ return handler.Handle(request); }
- 2 回答
- 0 關注
- 252 瀏覽
添加回答
舉報
0/150
提交
取消