using Autofac; using Autofac.Extensions.DependencyInjection; using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.Configuration; using QYZH.InteractiveMagazine.Infrastructure.MessageQueue; using QYZH.InteractiveMagazine.Models.Settings; using RabbitMQ.Client; using StackExchange.Redis; namespace QYZH.InteractiveMagazine.Infrastructure.Autofacs { public static class AutofacExtension { /// /// 根据程序集名称获取程序集 /// /// Web应用程序构建器 public static void UseAutofac(this WebApplicationBuilder builder) { builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory()) .ConfigureContainer((c, containerBuilder) => { var friendlyName = AppDomain.CurrentDomain.FriendlyName; var source = friendlyName.Split('.'); var assemblyNames = string.Join(".", source.Take(source.Length - 1)); containerBuilder.RegisterModule(new AutofacModuleRegister(assemblyNames)); InitializeRabbitMQ(c.Configuration, containerBuilder); }); } private static void InitializeRabbitMQ(IConfiguration configuration, ContainerBuilder containerBuilder) { var rabbitMQSettings = configuration.GetSection("RabbitMQSettings").Get(); if (rabbitMQSettings != null && !string.IsNullOrWhiteSpace(rabbitMQSettings.HostName)) { var factory = new ConnectionFactory { HostName = rabbitMQSettings.HostName, Port = rabbitMQSettings.Port, UserName = rabbitMQSettings.UserName ?? string.Empty, Password = rabbitMQSettings.Password ?? string.Empty, VirtualHost = rabbitMQSettings.VirtualHost ?? string.Empty }; var connection = factory.CreateConnectionAsync().GetAwaiter().GetResult(); containerBuilder.RegisterInstance(connection).As().SingleInstance(); containerBuilder.RegisterType().InstancePerDependency(); } } } }