一 激活DI

1.1 .net core3.x以上版本时的配置

NuGet 引用 AspectCore.Extensions.Hosting

在Program.cs 中激活 UseServiceContext()

public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .UseServiceContext() //激活aspectcore
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    var host = AppSettings.Get("WebHost");
                    webBuilder.UseStartup<Startup>().UseUrls(host);
                }) ;

1.2 .net core2.x时的配置

public IServiceProvider ConfigureServices(IServiceCollection services)
{
     ...其它 
     services.AutoRegister("Service"); //Service为您的程序集名称,仅此一行即可
     //在控制器中使用属性注入
     services.AddMvc().AddControllersAsServices();
     return services.GetServiceProvider(); //激活DI
} 

二 自动注入应用程序中的接口

在asp.net core项目中,可以根据程序集名称自动完成注入 AutoRegister(项目名称) 遍历指定名称应用程序中的接口,自动完成注入

  services.AutoRegister("Project.Service");

三.构造注入与属性注入的实例

RsCode提供了构造注入与属性注入两种方式

属性注入标签 [FromServiceContext],如果要在Controller中使用,需要Startup中配置AddControllersAsServices()

services.AddMvc().AddControllersAsServices();
   public interface IFF : IScopedDependency
    {  
        int Add(int a, int b);
    }
    public class FF : IFF
    {
        [FromServiceContext]
        IAA aa { get; set; }//属性注入
        public int Add(int a, int b)
        {
            int c = aa.Add(100);
            return a + b+c;
        }
    }


    public interface IAA:IScopedDependency
    {
        int Add(int a);        
    }

    public class AA:IAA
    {
       public int Add(int a)
        {
            return a + 100;
        }
    }

DI生命周期

ITransientDependency 瞬时(Transient)生命周期服务在它们每次请求时被创建。

ISingletonDependency 单例(Singleton)生命周期服务在它们第一次被解析时创建,并且每个后续解析将使用相同的实例

IScopedDependency 作用域(Scoped)生命周期服务在每个作用域内被创建一次