如何用Autofac注入AutoMapper?

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)

Yac*_*sad 3

看来您需要使用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