zoukankan      html  css  js  c++  java
  • ASP.NET Core依赖注入(DI)

    ASP.NET Core允许我们指定注册服务的生存期.服务实例将根据指定的生存时间自动处理.因此,我们无需担心清理此依赖关系,他将由ASP.NET Core框架处理.有如下三种类型的生命周期.


    Microsoft.Extensions.DependencyInjection.ServiceLifetime枚举值

    public enum ServiceLifetime
    {
      Singleton,
      Scoped,
      Transient
    }
    

    Singleton

    应用程序将在该应用程序生命周期内创建并共享这个实例.可以使用IServiceCollection的AddSingleton方法将服务作为单例添加。ASP.NET Core在注册时创建服务实例,并且在每次请求使用该服务实例.

    Transient

    我们可以使用它在每次请求时都会去创建一个新的实例.可以使用IServiceCollection的AddTransient方法将服务添加为Transient.

    Scoped

    将根据应用程序的请求创建并共享服务实例.这意味着每个请求可以使用一个服务实例.他将为每个新请求创建一个新实例.可以使用IServiceCollection的AddScoped方法将服务添加为Scoped.

    控制器依赖注入

    ASP.NET Core具有构造函数的默认支持,控制器所需的依赖只是在构造函数中向控制器添加服务.ASP.NET Core他会识别该服务类型并且会去解析该类型.

    private readonly IMessage _message;
    public HomeController(IMessage message){
        this._message=message;
    }
    public IActionResult Index(){
        ViewData["msg"] = _message.Get();
        return View();
    }
    
    

    方法注入

    ASP.NET Core他可以让我们通过FromServices属性将依赖注入

    
    public IActionResult Index([FromServices]IMessage message){
        ViewData["msg"] = message.Get();
        return View();
    }
    
    

    手动注入

    这种情况服务不会作为参数注入到控制器构造函数或Controller中.使用HttpContext.RequestServices的GetService方法我们可以获得这个Service容器配置的依赖服务.

    
    public IActionResult Index(){
        var message=(IMessage)this.HttpContext.RequestServices.GetService(typeof(IMessage));
        ViewData["msg"] = message.Get();
        return View();
    }
    
    

    服务注册到视图

    它也可以将依赖项注入到View.正如下面代码片段我们可以使用@inject指令将服务依赖项注入到视图中.

    @inject IMessage message
    <h1>@message.Get()</h1>
    
    

    并没有为我们默认提供属性注入.如果有需要可以参考第三方Ioc框架

  • 相关阅读:
    Eclipse:构造函数不提示才发现
    Java:终于找到了在alloy中的JFileChooser中的弹出式菜单不显示文字的解决办法
    java:给图片上加水印
    Asp:函数是用传值还是传址
    数据库移植注意事项
    51nod 1009 数字1的数量
    51nod1003 阶乘后面0的数量
    51nod 1002 数塔取数问题
    2017 Multi-University Training Contest
    HDU 3251 Being a Hero 最小割
  • 原文地址:https://www.cnblogs.com/mengcheng9300/p/12915854.html
Copyright © 2011-2022 走看看