ram*_*_rp 5 c# asp.net-mvc dependency-injection autofac automapper
将 AutoMapper 注入其他层的正确方法是什么?
我读了这篇博文,但这段代码导致下面的异常
AutoMapper.dll 中发生“AutoMapper.AutoMapperMappingException”类型的异常,但未在用户代码中处理
当尝试在服务层映射时。
List<StudentViewModel> list2 = _mapper.Map<List<StudentViewModel>>(list);
Run Code Online (Sandbox Code Playgroud)
我的 AutoFac 配置如下:
public static class DependencyRegistration
{
public static void Config()
{
var builder = new ContainerBuilder();
builder.RegisterControllers(typeof(MvcApplication).Assembly);
builder.RegisterType<TypeMapFactory>().As<ITypeMapFactory>();
builder.RegisterType<ConfigurationStore>().As<ConfigurationStore>().WithParameter("mappers", MapperRegistry.Mappers).SingleInstance();
builder.Register((ctx, t) => ctx.Resolve<ConfigurationStore>()).As<IConfiguration>().As<IConfigurationProvider>();
builder.RegisterType<MappingEngine>().As<IMappingEngine>();
//...
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
}
}
Run Code Online (Sandbox Code Playgroud)
看来您需要使用IConfiguration在容器中注册的对象来创建地图,如下所示:
var configuration = container.Resolve<IConfiguration>();
configuration.CreateMap<Student, StudentViewModel>();
Run Code Online (Sandbox Code Playgroud)
我认为你应该在申请开始时就这样做。
这是在方法中配置事物的更好方法(IMO)Config:
public static void Config()
{
var configuration_store = new ConfigurationStore(new TypeMapFactory(), MapperRegistry.Mappers);
var mapping_engine = new MappingEngine(configuration_store);
configuration_store.CreateMap<Student, StudentViewModel>();
var builder = new ContainerBuilder();
builder.RegisterInstance(mapping_engine).As<IMappingEngine>();
//...
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
}
Run Code Online (Sandbox Code Playgroud)
我假设在最后一个示例中,您的类只需要访问IMappingEngine(而不是),因为您应该已经在方法(或应用程序启动时的其他一些配置方法)IConfiguration中设置了所有映射。Config
| 归档时间: |
|
| 查看次数: |
10515 次 |
| 最近记录: |