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;
}
}