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

时间:2016-11-15 07:25:37

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

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

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

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

var service = HttpContext.RequestServices.GetService(typeof(FooService)) as FooService;

但是the docs say这是一个坏主意。我同意。

那么我的选择是什么?

1 个答案:

答案 0 :(得分:5)

您可以使用FromServices属性为操作注入依赖项:

public IActionResult SampleAction([FromServices]FooService fooService)
{
   // ...
}
  

有时候,您不需要为一项以上的行动提供服务   你的控制器。在这种情况下,注入服务可能是有意义的   作为action方法的参数。这是通过标记来完成的   具有[FromServices]属性的参数如下所示:

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