.Net6 使用Autofac进行依赖注入
一、背景
刚接触.net 6,记录一下在.net6上是怎么使用Autofac进行动态的依赖注入的
二、注入方式
1、新建一个webapi项目,框架选择net 6
2、引用Nuget包---Autofac.Extensions.Dependency
3、在Program.cs上添加如下代码
//依赖注入
builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory())//注册服务工厂
.ConfigureContainer<ContainerBuilder>(container =>
{
  //添加依赖注入,AddModule是一个自定义的拓展方法,将依赖注入的方法单独提取出来,方便管理
    builder.Services.AddModule(container, builder.Configuration);
});
4、AddModule方法
public static IServiceCollection AddModule(this IServiceCollection services, ContainerBuilder builder, IConfiguration configuration) { //初始化配置文件 Type baseType = typeof(IDependency);//自定义的空类 //动态运行项目的类库 var compilationLibrary = DependencyContext.Default .RuntimeLibraries .Where(x => !x.Serviceable && x.Type == "project") .ToList(); var count1 = compilationLibrary.Count; List<Assembly> assemblyList = new List<Assembly>(); foreach (var _compilation in compilationLibrary) { try { assemblyList.Add(AssemblyLoadContext.Default.LoadFromAssemblyName(new AssemblyName(_compilation.Name))); } catch (Exception ex) { Console.WriteLine(_compilation.Name + ex.Message); } } //注册程序集的方式添加依赖 builder.RegisterAssemblyTypes(assemblyList.ToArray()) .Where(type => baseType.IsAssignableFrom(type) && !type.IsAbstract)//过滤非抽象类,继承了IDependency接口的类 .AsSelf().AsImplementedInterfaces() .InstancePerLifetimeScope();//实例的生命周期 //单独注册依赖服务 builder.RegisterType<MemoryCacheService>().As<ICacheService>().SingleInstance(); return services; }
5、实现上诉步骤后,可实现.net 6形式的Autofac依赖注入
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号