如何使用ASP.NET Core在一个方法中获得所需的依赖项

gro*_*kky 1 c# asp.net dependency-injection asp.net-core

我已经FooBar使用ASP.NET的内置容器注册了我的类型.

我需要一个动作方法中的实例.如果我在所有控制器的动作中都需要它,那么我会将它注入构造函数中.但我只需要一种动作方法.

所以在动作方法中,我假设我可以这样做(未经测试):

var service = HttpContext.RequestServices.GetService(typeof(FooService)) as FooService;
Run Code Online (Sandbox Code Playgroud)

但是文档说这是一个坏主意.我同意.

那么我的选择是什么?

ade*_*lin 5

您可以使用FromServicesattribute将依赖项注入操作:

public IActionResult SampleAction([FromServices]FooService fooService)
{
   // ...
}
Run Code Online (Sandbox Code Playgroud)

有时,您不需要为控制器中的多个操作提供服务.在这种情况下,将服务作为参数注入动作方法可能是有意义的.这是通过使用属性[FromServices]标记参数来完成的,如下所示:

请参阅官方文档:https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/dependency-injection#action-injection-with-fromservices