public class AutoMapperModule : Autofac.Module
{
protected override void Load(ContainerBuilder builder)
{
builder.RegisterType<CustomValueResolver>().AsSelf();
builder.RegisterType<CustomTypeConverter>().AsSelf();
builder.Register(c =>
{
var context = c.Resolve<IComponentContext>();
return new MapperConfiguration(cfg =>
cfg.CreateMap<MyModel, MyVModelDto>().
ConstructUsing(e => new MyModelDto(context.Resolve<IMyModelDtoRegisteredService>())).ReverseMap());
}).AsSelf().SingleInstance();
builder.Register(c =>
{
var context = c.Resolve<IComponentContext>();
var config = context.Resolve<MapperConfiguration>();
return config.CreateMapper(context.Resolve);
}
).As<IMapper>().InstancePerLifetimeScope();
}
}
var builder = WebApplication.CreateBuilder(args);
builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());
builder.Services.AddControllersWithViews();
builder.Host.ConfigureContainer<ContainerBuilder>(builder => builder.RegisterType<Service>().As<IService>());
builder.Host.ConfigureContainer<ContainerBuilder>(builder => builder.RegisterModule(new AutoMapperModule()));
var app = builder.Build();