当前位置: 首页 > 编程笔记 >

asp.net-core 将依赖项注入Controller Action

杨宏儒
2023-03-14
本文向大家介绍asp.net-core 将依赖项注入Controller Action,包括了asp.net-core 将依赖项注入Controller Action的使用技巧和注意事项,需要的朋友参考一下

示例

鲜为人知的内置功能是使用的Controller Action注入FromServicesAttribute。

[HttpGet]
public async Task<IActionResult> GetAllAsync([FromServices]IProductService products)
{
     return Ok(await products.GetAllAsync());
}

重要说明是,[FromServices] 不能将其用作常规的“属性注入”或“方法注入”机制!它只能在控制器动作或控制器构造函数的方法参数上使用(尽管在构造函数中已过时,因为ASP.NETCore DI系统已经使用了构造函数注入,并且不需要额外的标记)。

不能在控制器以外的任何地方使用它,控制器动作。它也非常特定于ASP.NETCore MVC,并且驻留在Microsoft.AspNetCore.Mvc.Core程序集中。

ASP.NET核心MVC GitHub问题的原始报价(限制[FromServices]仅适用于参数)有关此属性:

@rynowak:

@埃隆:

属性的问题在于,对于许多人而言,它似乎可以应用于任何对象的任何属性。

同意,用户发布了许多问题,对于如何使用此功能感到困惑。实际上,“ [FromServices]很奇怪,我不喜欢”和“ [FromServices]让我感到困惑”这两种类型都确实有大量反馈。感觉就像是一个陷阱,而团队仍会在此回答几年以后的问题。

我们认为[FromServices]的最有价值的情况是在只需要在那个地方进行的一项服务操作的方法参数上。

/ cc @ danroth27-文档更改

对于热爱当前[FromServices]的任何人,我强烈建议您研究可以进行属性注入的DI系统(例如Autofac)。

笔记:

  • 可以使用[FromServices]属性将在.NET Core依赖注入系统中注册的所有服务注入到控制器的动作中。

  • 最相关的情况是,当您只需要一个动作方法中的服务,而又不想让控制器的构造函数与另一个依赖关系混杂在一起时,该依赖关系将仅使用一次。

  • 不能在ASP.NETCore MVC(即纯.NET Framework或.NET Core控制台应用程序)之外使用,因为它驻留在Microsoft.AspNetCore.Mvc.Core程序集中。

  • 对于属性或方法注入,您必须使用可用的第三方IoC容器之一(Autofac,Unity等)。

 类似资料:
  • 问题内容: 我想将依赖项注入。但是,我的方法不起作用。我可以看到Spring正在调用我的setter方法,但是稍后在调用when时,该属性为。 这是我的设置: ServletContextListener: web.xml :(这是文件中的最后一个侦听器) applicationContext.xml: 输出: 实现此目的的正确方法是什么? 问题答案: 我通过删除侦听器bean并为我的属性创建了一

  • 我试图注入一个接口到我的HomeController,我得到这个错误: InvalidOperationException:无法解析类型“Microsoft”的服务。扩展。配置尝试激活时的IConfiguration 我的创业课程如下: 我的HomeController构造函数是: 请告诉我哪里弄错了。 微软扩展。依赖注入。服务查找。服务PopulateCallSites(ServiceProvi

  • 问题内容: 我试图将Spring依赖项注入到JPA EntityListener中。这是我的侦听器类: 这是我的Entity类: 但是,我的依赖项(即)始终为null。 问题答案: 注入对无状态bean的依赖关系的一种方法是将依赖关系定义为“静态”,创建一个setter方法,以便Spring可以注入依赖关系(将其分配给静态依赖关系)。 将依赖项声明为静态。 创建一个方法,以便Spring可以注入它

  • 我的大多数服务通常与crud方法相同

  • 本文向大家介绍asp.net-core 检索控制器上的依赖项,包括了asp.net-core 检索控制器上的依赖项的使用技巧和注意事项,需要的朋友参考一下 示例 注册后,可以通过在Controller构造函数上添加参数来检索依赖关系。