我正在尝试将我的AutoMapper (Version5.2.0)配置文件类注册到我的Unity (UnifiedVersion4.0.1)中,这给了我一个例外:
解决依赖关系失败,类型= IConsumer`1Commands.INewUserEmailCommand",名称=“(无)”。异常发生时:正在解析。例外是:InvalidOperationException -当前类型AutoMapper.IConfigurationProvider是一个接口,无法构造。您缺少类型映射吗??
下面是profile类:
public class AutoMapperBootstrap : Profile
{
public AutoMapperBootstrap()
{
this.CreateMap<IUserEmailDTO, MergeUserEmailRequest>();
}
}以下是统一注册片段:
Profile typeMaps = new AutoMapperBootstrap();
var config = new MapperConfiguration(cfg => cfg.AddProfile(typeMaps));
container.RegisterInstance<IMapper>(config.CreateMapper(), new ContainerControlledLifetimeManager());那么,我有依赖于注入IMapper实例的构造函数,它显然不知道,或者它需要一些额外的IConfigurationProvider实例?我遗漏了什么?当我的代码需要调用依赖于IMapper的服务时,统一抛出了上面的异常。下面是一个使用构造函数注入来获取IMapper实例的服务示例。
public class FooService : IFooService
{
private readonly IMapper mapper;
public Foo(IMapper mapper)
{
this.mapper = mapper;
}
}发布于 2017-05-26 14:45:03
@Andy,我认为您只是在映射中复制了部分错误,通常自动程序会给您提供更多失败的细节,并能给您一个提示。
在下面的行中,您正在尝试注册IMapper类的一个实例
container.RegisterInstance<IMapper>(config.CreateMapper(), new ContainerControlledLifetimeManager());如果您查看CreateMapper的实际工作方式,您将看到它使用了一个IConfigurationProvider,请检查下面的自动代码
public class MapperConfiguration : IConfigurationProvider
{
.....
public IMapper CreateMapper()
{
return (IMapper) new Mapper((IConfigurationProvider) this);
}
.....
}当automapper试图创建一个Mapper实例时,它也试图解析参数IConfigurationProvider。在这种情况下,你从来没有注入那个参数。解析:注入该参数的实例,仅此而已
在这里,我将为您保存一个示例,说明我如何使用它。
class Helper
{
public static MapperConfiguration InitializeAutoMapper()
{
MapperConfiguration config = new MapperConfiguration(cfg =>
{
cfg.AddProfile(new ProfileA());
cfg.AddProfile(new ProfileB());
});
return config;
}
}在您的统一上注册,其中container是IUnityContainer的实例
var mapperConfig = Helper.InitializeAutoMapper();
var mapper = mapperConfig.CreateMapper();
container.RegisterType<IMapper, Mapper>(new InjectionConstructor(mapperConfig));
container.RegisterInstance(mapper, Activator.CreateInstance<T>());https://stackoverflow.com/questions/42382359
复制相似问题