C# 如何使用ASP.NET Core仅在一种方法中获得所需的依赖关系

C# 如何使用ASP.NET Core仅在一种方法中获得所需的依赖关系,c#,asp.net,dependency-injection,asp.net-core,C#,Asp.net,Dependency Injection,Asp.net Core,我已经用ASP.NET的内置容器注册了FooBar类型 我的一个动作方法中需要一个实例。如果我在控制器的所有操作中都需要它,那么我会将它注入构造函数。但我只需要一个动作方法 因此,在action方法中,我假设我可以在未经测试的情况下执行此操作: var service = HttpContext.RequestServices.GetService(typeof(FooService)) as FooService; 但这是个坏主意。我同意 那么我的选项是什么呢?您可以使用FromServic

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

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

因此,在action方法中,我假设我可以在未经测试的情况下执行此操作:

var service = HttpContext.RequestServices.GetService(typeof(FooService)) as FooService;
但这是个坏主意。我同意

那么我的选项是什么呢?

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

public IActionResult SampleAction([FromServices]FooService fooService)
{
   // ...
}
有时,您不需要为内部的多个操作提供服务 你的控制器。在这种情况下,注入服务可能是有意义的 作为动作方法的参数。这是通过标记 属性为[FromServices]的参数,如下所示:

请参阅官方文档:

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

public IActionResult SampleAction([FromServices]FooService fooService)
{
   // ...
}
有时,您不需要为内部的多个操作提供服务 你的控制器。在这种情况下,注入服务可能是有意义的 作为动作方法的参数。这是通过标记 属性为[FromServices]的参数,如下所示:


请参阅官方文档:

然后此方法是将其移动到自己的控制器的最佳选择。并传递依赖关系constructor@Fabio不是在我的情况下,不是。那么通过当前控制器的构造函数传递依赖关系有什么错呢?如果你严格要求只使用一个控制器,那么依赖关系可以通过三种方式传递给实例,我现在知道构造函数、方法和属性。在ASP.NET方法和属性的情况下,这不是一个简单的方法,所以您只有构造函数。例如,如果您将依赖项设置为公共属性,那么您只能在中间件中为该方法设置依赖项,但这会使您的代码更复杂maintain@Fabio好吧,这就是我需要知道的。我找不到ASP.NET核心容器的适当文档。他们只讨论构造函数注入。我希望有一个简单的方法来实现非构造函数的方式,那么这个方法是将它移动到自己的控制器的很好的候选者。并传递依赖关系constructor@Fabio不是在我的情况下,不是。那么通过当前控制器的构造函数传递依赖关系有什么错呢?如果你严格要求只使用一个控制器,那么依赖关系可以通过三种方式传递给实例,我现在知道构造函数、方法和属性。在ASP.NET方法和属性的情况下,这不是一个简单的方法,所以您只有构造函数。例如,如果您将依赖项设置为公共属性,那么您只能在中间件中为该方法设置依赖项,但这会使您的代码更复杂maintain@Fabio好吧,这就是我需要知道的。我找不到ASP.NET核心容器的适当文档。他们只讨论构造函数注入。我希望有一个简单的方法做非建设者的方式。他们升级了文档网站,所以我错过了!谢谢这正是我需要的。他们升级了文档网站,所以我错过了!谢谢这正是我需要的。