c# - 如何将 Automapper 与 Autofac 一起使用
问题描述
我已升级到最新版本的 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);
和编译器错误:
非静态字段、方法或属性“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);
}
}
然后你需要做的就是注入IMapper
推荐阅读
- amazon-web-services - 无法从一个 AWS 实例远程登录到另一个(解决 master_not_discovered_exception)
- java - 在android studio上使用java和weka复制类
- progressive-web-apps - Service Worker 在托管时不工作,但在 localhost 上工作
- zsh - zsh _arguments:带有不同数量参数的 --option 和之后的 --other-option
- bash - 如何使用带有 bash 脚本和 xdotool 的 Thunderbird 发送自动邮件?
- mule - HTTPS 连接器上无法识别 Spring 属性
- python - AttributeError: 'QComboBox' 对象没有属性 'setPlaceholderText' 我该如何解决这个问题?
- django - Django - 编辑或删除表中的选定行
- c++ - 使用 void 函数时没有输出
- python-3.x - matplotlib python datetime TypeError