zoukankan      html  css  js  c++  java
  • .net core DI 注册 Lazy<> 类型

        当我们在 .net core (2.1) 中运行如下代码注入 Lazy<T> 变量的时候:

    public AccountService(Lazy<IHttpContextAccessor> httpContextAccessor)
    {
    }

        可能会遇到这样的错误提示:

    InvalidOperationException: Unable to resolve service for type 'System.Lazy`1[Microsoft.AspNetCore.Http.IHttpContextAccessor]' while attempting to activate 'Senparc.Service.AccountService'.

        原因在于系统没有办法识别 Lazy<T> 类型的依赖注入条件,我们可以在 Startup.cs 中的 public void ConfigureServices(IServiceCollection services) 方法中加入如下粗体代码使之生效:

            public void ConfigureServices(IServiceCollection services)
            {
                services.AddMvc();//默认会有
                services.AddTransient(typeof(Lazy<>));//注册Lazy
            }

        Lazy<T> 是一个非常好的延迟加载的特性,可以在使用到该变量的时候才真正进行参数实例化和一系列控制反转的操作。因为通常我们某一个Service中可能只有一部分的方法需要用到某个变量,但是这个变量又需要在构造函数中依赖注入,此时 Lazy<T> 将帮助提升效率。

  • 相关阅读:
    自考新教材-p209
    自考新教材-p205
    自考新教材-p200
    自考新教材-p197
    Java IO (5)
    Java IO (1)
    Java IO (2)
    Java IO (3)
    通过源码学Java基础:InputStream、OutputStream、FileInputStream和FileOutputStream
    Spring入门(1)-第一个Spring项目
  • 原文地址:https://www.cnblogs.com/szw/p/8985109.html
Copyright © 2011-2022 走看看