Ioc使用 - kuiyu/RsCode GitHub Wiki

一 自动注入

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

在asp.net core项目中,可以根据程序集名称自动完成注入

1.1 .net core3.x时的配置

NuGet 引用 AspectCore.Extensions.Hosting

Program.cs 中激活Aspectcore

public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .UseServiceContext() //激活aspectcore
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    var host = AppSettings.Get("WebHost");
                    webBuilder.UseStartup<Startup>().UseUrls(host);
                }) ;
using Rs.DI;
public void ConfigureServices(IServiceCollection services)
{
     ...其它
      
     services.AutoRegister("Project.Service"); //Service为您的程序集名称,仅此一行即可
     //在控制器中使用属性注入
     services.AddMvc().AddControllersAsServices();
     
} 

1.2 .net core2.x时的配置

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

你的业务接口需要继承,以下三个接口才有效

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

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

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

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

属性注入 [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;
        }
    }
⚠️ **GitHub.com Fallback** ⚠️