using Autofac; using Autofac.Extensions.DependencyInjection; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Caching.Memory; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyModel; using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Runtime.Loader; using VOL.Core.CacheManager; using VOL.Core.Configuration; using VOL.Core.Const; using VOL.Core.DBManager; using VOL.Core.Enums; using VOL.Core.Extensions.AutofacManager; //using VOL.Core.KafkaManager.IService; //using VOL.Core.KafkaManager.Service; using VOL.Core.ManageUser; using VOL.Core.ObjectActionValidator; using VOL.Core.Services; namespace VOL.Core.Extensions { public static class AutofacContainerModuleExtension { // private static bool _isMysql = false; 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 assemblyList = new List(); 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(); builder.RegisterType().InstancePerLifetimeScope(); builder.RegisterType().InstancePerLifetimeScope(); //model校验结果 builder.RegisterType().InstancePerLifetimeScope(); //启用缓存 if (AppSetting.UseRedis) { builder.RegisterType().As().SingleInstance(); } else { builder.RegisterType().As().SingleInstance(); } //kafka注入 //if (AppSetting.Kafka.UseConsumer) // builder.RegisterType>().As>().SingleInstance(); //if (AppSetting.Kafka.UseProducer) // builder.RegisterType>().As>().SingleInstance(); return services; } } }