我正在使用WCF服务,并已通过AutoFac设置了DI,并且还希望使用automapper。我相信我的注射正确无误,因为当我进入该服务希望致电时可以看到我的配置。
在我的global.asax文件中,我具有此配置;
protected void Application_Start(object sender, EventArgs e)
{
var builder = new ContainerBuilder();
builder.RegisterType<ProposalService>().As<IProposalService>();
builder.RegisterType<ProposalListService>().As<IProposalListService>();
builder.RegisterType<ProposalContext>().As<IProposalContext>();
builder.RegisterType<GetProposalListRequestProfile>().As<Profile>();
builder.Register(c => new MapperConfiguration(cfg =>
{
foreach (var profile in c.Resolve<IEnumerable<Profile>>())
{
cfg.AddProfile(profile);
}
})).AsSelf().SingleInstance();
builder.Register(c => c.Resolve<MapperConfiguration>().CreateMapper(c.Resolve)).As<IMapper>().InstancePerLifetimeScope();
AutofacHostFactory.Container = builder.Build();
}
在服务中,我不想使用
public class ProposalListService : IProposalListService
{
private IProposalContext _proposalContext;
private IMapper _mapper;
public ProposalListService(IProposalContext proposlContext, IMapper mapper)
{
_proposalContext = proposlContext;
_mapper = mapper;
}
public getProposalListResponse GetProposalList(getProposalListRequest request)
{
var mappedRequest = _mapper.Map<getProposalListRequest, Data.Models.getProposalListRequest>(request);
var result = _proposalContext.GetProposalList(mappedRequest);
var mappedResponse = _mapper.Map<Data.Models.getProposalListResponse, getProposalListResponse>(result);
return mappedResponse;
}
}
还有我的映射配置文件
public class GetProposalListRequestProfile : Profile
{
public GetProposalListRequestProfile()
{
IMappingExpression<Data.Models.getProposalListRequest, getProposalListRequest>
mappingExpression =
CreateMap<Data.Models.getProposalListRequest, getProposalListRequest>()
.ForMember(dest => dest.getProposalList, opt => opt.MapFrom(src => src.getProposalList));
}
}
结构是
WCF服务将转到类库,然后将调用EF来获取数据,但是,当我到达第var mappedRequest = _mapper.Map<getProposalListRequest, Data.Models.getProposalListRequest>(request);
行时,会出现错误
AutoMapper.AutoMapperMappingException:'缺少类型映射配置或不支持的映射。'
请您为解决此问题提供任何帮助。
谢谢
答案 0 :(得分:1)
如果您将检查CreateMap
方法,您将看到下一个:
IMappingExpression<TSource, TDestination> CreateMap<TSource, TDestination>();
因此,您的CreateMap<Data.Models.getProposalListRequest, getProposalListRequest>()
将创建从Data.Models.getProposalListRequest
到getProposalListRequest
的地图,因此要处理用例,您可以添加还原的注册,也可以尝试在{之后添加.ReverseMap()
调用{1}}。