【发布时间】:2020-04-06 10:20:51
【问题描述】:
我知道如何直接注入控制器动作和控制器,方法是将服务添加到 IServiceprovider,然后框架为我处理它,在控制器动作的情况下,我可以添加 [Microsoft.AspNetCore.Mvc.FromServices],它会注入服务于具体行动。
但这需要我的控制器明确知道底层参数需要什么,这是我认为不必要且可能有害的耦合。
我想知道是否有可能接近以下内容:
[HttpPost]
public async Task<ActionResult> PostThings([FromBody]ParameterClassWithInjection parameter) {
parameter.DoStuff();
...}
public class ParameterClassWithInjection{
public readonly MyService _myService;
public ParameterClassWithInjection(IMyService service){ _myService = service;}
public void DoStuff(){ _myService.DoStuff(); }
}
我只在文档中找到了一些关于自定义模型绑定器的信息。 https://docs.microsoft.com/en-us/aspnet/core/mvc/advanced/custom-model-binding?view=aspnetcore-3.1#custom-model-binder-sample
这显示了如何创建自定义绑定器并让自定义提供程序提供注入。 似乎我需要从自动绑定中实现很多样板代码(在每种情况下对我来说都非常好),以便获得一些依赖注入。
如果这是唯一的选择,我希望你能给我指明一个更好的方向或停止我的追求。
【问题讨论】:
标签: c# asp.net-core dependency-injection controller model-binding