我已升级到最新版本的 AutoMapper (9.0),并将静态配置更改为:
public static IMapper RegisterAutoMapper()
{
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap<MyModel MyDto>;
//etc...
});
var mapper = config.CreateMapper();
return mapper;
}
使用以前的静态 API 我曾经在 Global.asax
中执行以下操作:protected void Application_Start()
{
GlobalConfiguration.Configure(WebApiConfig.Register);
AutoMapping.Map();
}
WebApiConfig.Register
注册路线和Autofac
如何使用 Autofac 注册 AutoMapper,因为目前我在这些行上遇到编译器错误:var myDto = Mapper.Map<MyModel>(model);
和编译器错误:An object reference is required for the non-static field, method, or property 'Mapper.Map(object)'
最佳答案
这是我之前做的一个:
public class YourAutofacModule : Module
{
protected override void Load(ContainerBuilder builder)
{
//Also register any custom type converter/value resolvers
builder.RegisterType<CustomValueResolver>().AsSelf();
builder.RegisterType<CustomTypeConverter>().AsSelf();
builder.Register(context => new MapperConfiguration(cfg =>
{
cfg.CreateMap<MyModel MyDto>;
//etc...
})).AsSelf().SingleInstance();
builder.Register(c =>
{
//This resolves a new context that can be used later.
var context = c.Resolve<IComponentContext>();
var config = context.Resolve<MapperConfiguration>();
return config.CreateMapper(context.Resolve);
})
.As<IMapper>()
.InstancePerLifetimeScope();
}
}
在 global.asax.cs
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
var builder = new ContainerBuilder();
builder.RegisterModule<MyAutofacModule>();
// Register anything else needed
var container = builder.Build();
// MVC resolver
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
// API Resolver
GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver(container);
}
}
然后你需要做的就是注入(inject)IMapper
关于c# - 如何将 Automapper 与 Autofac 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57519739/