咸阳做网站,58同城建设银行招聘网站,响应式网站原理,如何设置wordpress的语言一、背景 刚接触.net 6#xff0c;记录一下在.net6上是怎么使用Autofac进行动态的依赖注入的 二、注入方式 1、新建一个webapi项目#xff0c;框架选择net 6 2、引用Nuget包---Autofac.Extensions.Dependency 3、在Program.cs上添加如下代码
//依赖注入
builder.Host.Us…一、背景 刚接触.net 6记录一下在.net6上是怎么使用Autofac进行动态的依赖注入的 二、注入方式 1、新建一个webapi项目框架选择net 6 2、引用Nuget包---Autofac.Extensions.Dependency 3、在Program.cs上添加如下代码
//依赖注入
builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory())//注册服务工厂
.ConfigureContainerContainerBuilder(container
{ //添加依赖注入AddModule是一个自定义的拓展方法将依赖注入的方法单独提取出来方便管理builder.Services.AddModule(container);
});
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;ListAssembly assemblyList new ListAssembly();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.RegisterGeneric(typeof(BaseRepository,)).As(typeof(IRepository,));builder.RegisterGeneric(typeof(UnitWork)).As(typeof(IUnitWork));//注册app层builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly());builder.RegisterType(typeof(RedisCacheContext)).As(typeof(ICacheContext));builder.RegisterTypeMemoryCacheService().AsICacheService().SingleInstance();return services;}
4.
或
//依赖注入
builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory())
以及再startup.cs中添加ConfigureContainer方法 public void ConfigureContainer(ContainerBuilder builder) { ExtAutofac.InitAutofac(builder); }
在app层
namespace App
{public static class ExtAutofac{private static IContainer _container;public static void InitAutofac(ContainerBuilder builder){//注册数据库基础操作和工作单元builder.RegisterGeneric(typeof(BaseRepository,)).As(typeof(IRepository,));builder.RegisterGeneric(typeof(UnitWork)).As(typeof(IUnitWork));//注册app层builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly());builder.RegisterType(typeof(RedisCacheContext)).As(typeof(ICacheContext));builder.RegisterType(typeof(HttpContextAccessor)).As(typeof(IHttpContextAccessor));InitDependency(builder);}/// summary/// 注入所有继承了IDependency接口/// /summary/// param namebuilder/paramprivate static void InitDependency(ContainerBuilder builder){Type baseType typeof(IDependency);var compilationLibrary DependencyContext.Default.CompileLibraries.Where(x !x.Serviceable x.Type project).ToList();var count1 compilationLibrary.Count;ListAssembly assemblyList new ListAssembly();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).AsSelf().AsImplementedInterfaces().InstancePerLifetimeScope();}}
}