using Autofac; using Autofac.Extras.DynamicProxy; using CQRS_Simple.EntityFrameworkCore; using CQRS_Simple.Infrastructure; using CQRS_Simple.Infrastructure.Dapper; using CQRS_Simple.Infrastructure.MQ; using CQRS_Simple.Infrastructure.Uow; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Logging; namespace CQRS_Simple.Modules { public class InfrastructureModule : Autofac.Module { private readonly string _databaseConnectionString; // private readonly ILoggerFactory _loggerFactory; public InfrastructureModule(string databaseConnectionString ) { this._databaseConnectionString = databaseConnectionString; // _loggerFactory = loggerFactory; } protected override void Load(ContainerBuilder builder) { builder.RegisterType().SingleInstance(); builder.Register(c => new SqlConnectionFactory(_databaseConnectionString)) .As() // .WithParameter("connectionString", _databaseConnectionString) .InstancePerLifetimeScope(); builder.RegisterGeneric(typeof(DapperRepository<,>)).As(typeof(IDapperRepository<,>)) .InstancePerLifetimeScope(); var dbBuild = new DbContextOptionsBuilder(); dbBuild.UseMySql(_databaseConnectionString, ServerVersion.Parse("5.7.31-mysql")); //dbBuild.UseSqlServer(_databaseConnectionString); // dbBuild.UseLoggerFactory(_loggerFactory); builder.Register(c => new SimpleDbContext(dbBuild.Options)) .As() .InstancePerLifetimeScope(); builder.RegisterType() .As() .InstancePerLifetimeScope() .OnRelease(instance => instance.CleanUp()) ; builder.RegisterGeneric(typeof(Repository<,>)).As(typeof(IRepository<,>)) .InstancePerLifetimeScope() .InterceptedBy(typeof(CallLogger)) .EnableInterfaceInterceptors(); ; } } }