当前位置:主页 > 查看内容

如何在 ASP.NET Core 中使用 FromServices

发布时间:2021-06-18 00:00| 位朋友查看

简介:ASP.NET Core 中内置了对依赖注入的支持,可以使用 依赖注入 的方式在运行时实现组件注入,这样可以让代码更加灵活,测试和可维护,通常有三种方式可以实现依赖注入。 构造函数注入 属性注入 方法注入 构造函数 这种注入方式在 ASP.NET Core 中应用的是最广……

ASP.NET Core 中内置了对依赖注入的支持,可以使用 依赖注入 的方式在运行时实现组件注入,这样可以让代码更加灵活,测试和可维护,通常有三种方式可以实现依赖注入。

构造函数注入

属性注入

方法注入

构造函数 这种注入方式在 ASP.NET Core 中应用的是最广的,可想而知,只用这种方式也不是 放之四海而皆准 ,比如说,我不希望每次 new class 的时候都不得不注入,换句话说,我想把依赖注入的粒度缩小,我希望只对某一个或者某几个方法单独实现注入,而不是全部,首先这能不能实现呢?实现肯定是没有问题的,只需用 FromServices 特性即可,它可以实现对 Controller.Action 单独注入。

这篇文章我们将会讨论如何在 ASP.NET Core 中使用 FromServices 特性实现依赖注入,同时我也会演示最通用的 构造函数注入 。

使用构造函数注入接下来先通过 构造函数 的方式实现依赖注入,考虑下面的 ISecurityService 接口

public interface ISecurityService { bool Validate(string userID, string password); } public class SecurityService : ISecurityService { public bool Validate(string userID, string password) { //Write code here to validate the user credentials return true; } }

要想实现依赖注入,还需要将 SecurityService 注入到 ServiceCollection 容器中,如下代码所示:

// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddTransient(); services.AddControllersWithViews(); }

下面的代码片段展示了如何通过 构造函数 的方式实现注入。

public class HomeController : Controller { private readonly ILogger _logger; private readonly ISecurityService _securityService; public HomeController(ILogger logger, ISecurityService securityService) { _logger = logger; _securityService = securityService; } public IActionResult Index() { var isSuccess = _securityService.Validate(string.Empty, string.Empty); return View(); } }

FromServicesAttribute 简介FromServicesAttribute 特性是在 Microsoft.AspNetCore.Mvc 命名空间下,通过它可以直接将service注入到action方法中,下面是 FromServicesAttribute 的源码定义:

[AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false, Inherited = true)] public class FromServicesAttribute : Attribute, IBindingSourceMetadata { public FromServicesAttribute(); public BindingSource BindingSource { get; } }

使用 FromServices 依赖注入接下来将 FromServices 注入到 Action 方法参数上,实现运行时参数的依赖解析,知道这些基础后,现在可以把上一节中的 构造函数注入 改造成 FromServices注入,如下代码所示:

public class HomeController : Controller { private readonly ILogger _logger; public HomeController(ILogger logger) { _logger = logger; } public IActionResult Index([FromServices] ISecurityService securityService) { var isSuccess = securityService.Validate(string.Empty, string.Empty); return View(); } }

图片

总的来说,如果你只想在某些Action上而不是整个 Controller 中使用依赖注入,那么使用 FromServices 将是一个非常好的选择,而且还可以让你的代码更加干净,更加可维护。

译文链接:https://www.infoworld.com/article/3451821/how-to-use-the-fromservices-attribute-in-aspnet-core.html


本文转载自网络,原文链接:
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!

推荐图文

  • 周排行
  • 月排行
  • 总排行

随机推荐