【发布时间】:2020-03-29 05:02:17
【问题描述】:
previous question 之后我有一个简单的IValueResolver 实现
public class FileLinkResolver : IValueResolver<Configuration, ConfigurationDto, string>
{
private readonly IFileStorage _fileStorage;
public FileLinkResolver(IFileStorage fileStorage)
{
_fileStorage = fileStorage;
}
public string Resolve(Configuration source, ConfigurationDto destination, string destMember, ResolutionContext context)
{
return _fileStorage.GetShortTemporaryLink(source.Path);
}
}
和简单的映射配置文件
public class MappingProfile : Profile
{
public MappingProfile()
{
CreateMap<Configuration, ConfigurationDto>()
.ForMember(dest => dest.FilePath, opt => opt.MapFrom<FileLinkResolver>());
}
}
对于生产,它在以下设置时按预期工作
services.AddTransient<IFileStorage>(...);
services.AddAutoMapper();
被使用,然后在控制器中注入IMapper。
在单元测试中我尝试存根映射器
var mapperStub = new Mapper(new MapperConfiguration(map => map.AddProfile(new MappingProfile())));
当我为方法 wwitch 运行测试应该返回映射的 dto 时,我得到了
AutoMapper.AutoMapperMappingException : 错误映射类型。
Mapping types: Configuration -> ConfigurationDto DataAccess.Models.Configuration -> Dto.ConfigurationDto Type Map configuration: Configuration -> ConfigurationDto DataAccess.Models.Configuration -> Dto.ConfigurationDto Destination Member: FilePath ---- System.MissingMethodException : No parameterless constructor defined for this object.
我尝试将无参数构造函数添加到 FileLinkResolver 但随后,NullReferenceException
这是一个问题:如何解决 ValueResolver 的依赖关系
【问题讨论】:
标签: c# .net asp.net-core dependency-injection automapper