首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AutoMapper统一AutoMapper.IConfigurationProvider问题

AutoMapper统一AutoMapper.IConfigurationProvider问题
EN

Stack Overflow用户
提问于 2017-02-22 03:48:59
回答 1查看 4.7K关注 0票数 1

我正在尝试将我的AutoMapper (Version5.2.0)配置文件类注册到我的Unity (UnifiedVersion4.0.1)中,这给了我一个例外:

解决依赖关系失败,类型= IConsumer`1Commands.INewUserEmailCommand",名称=“(无)”。异常发生时:正在解析。例外是:InvalidOperationException -当前类型AutoMapper.IConfigurationProvider是一个接口,无法构造。您缺少类型映射吗?

下面是profile类:

代码语言:javascript
复制
public class AutoMapperBootstrap : Profile
    {
        public AutoMapperBootstrap()
        {
            this.CreateMap<IUserEmailDTO, MergeUserEmailRequest>();
        }
    }

以下是统一注册片段:

代码语言:javascript
复制
Profile typeMaps = new AutoMapperBootstrap();
var config = new MapperConfiguration(cfg => cfg.AddProfile(typeMaps));
container.RegisterInstance<IMapper>(config.CreateMapper(), new ContainerControlledLifetimeManager());

那么,我有依赖于注入IMapper实例的构造函数,它显然不知道,或者它需要一些额外的IConfigurationProvider实例?我遗漏了什么?当我的代码需要调用依赖于IMapper的服务时,统一抛出了上面的异常。下面是一个使用构造函数注入来获取IMapper实例的服务示例。

代码语言:javascript
复制
public class FooService : IFooService
{
  private readonly IMapper mapper;

  public Foo(IMapper mapper)
  {
    this.mapper = mapper;
  }
}
EN

回答 1

Stack Overflow用户

发布于 2017-05-26 14:45:03

@Andy,我认为您只是在映射中复制了部分错误,通常自动程序会给您提供更多失败的细节,并能给您一个提示。

在下面的行中,您正在尝试注册IMapper类的一个实例

代码语言:javascript
复制
container.RegisterInstance<IMapper>(config.CreateMapper(), new ContainerControlledLifetimeManager());

如果您查看CreateMapper的实际工作方式,您将看到它使用了一个IConfigurationProvider,请检查下面的自动代码

代码语言:javascript
复制
public class MapperConfiguration : IConfigurationProvider
{
    .....

    public IMapper CreateMapper()
    {
       return (IMapper) new Mapper((IConfigurationProvider) this);
    }

    .....
}

当automapper试图创建一个Mapper实例时,它也试图解析参数IConfigurationProvider。在这种情况下,你从来没有注入那个参数。解析:注入该参数的实例,仅此而已

在这里,我将为您保存一个示例,说明我如何使用它。

代码语言:javascript
复制
class Helper
{
    public static MapperConfiguration InitializeAutoMapper()
    {
        MapperConfiguration config = new MapperConfiguration(cfg =>
        {
            cfg.AddProfile(new ProfileA());
            cfg.AddProfile(new ProfileB());
        });

        return config;
    }
}

在您的统一上注册,其中containerIUnityContainer的实例

代码语言:javascript
复制
var mapperConfig = Helper.InitializeAutoMapper();
var mapper = mapperConfig.CreateMapper();
container.RegisterType<IMapper, Mapper>(new InjectionConstructor(mapperConfig));
container.RegisterInstance(mapper, Activator.CreateInstance<T>());
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42382359

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档