Я использовал метод отображения атрибутов (введенный в AutoMapper 8.0), чтобы выполнить большое количество отображений к этой точке. Я бы предпочел продолжать использовать метод атрибута.
Однако я не знаю, как реализовать ValueResolverAttribute, учитывая следующий сценарий, в котором я пытаюсь отобразить строку (" ConfigurationSetting.Key") к объекту, который содержит дополнительную информацию о данном параметре конфигурации (" ConfigurationSettingDTO.Key"):
SOURCE
public class ConfigurationSetting
{
public string Key { get; set; }
public string Value { get; set; }
}
DESTINATION
[AutoMap(typeof(ConfigurationSetting))]
public class ConfigurationSettingDTO
{
[SourceMember(nameof(ConfigurationSetting.Key)), ValueResolver(typeof(ConfigurationSettingKeyResolver))]
public ConfigurationSettingKey Key { get; set; }
public string Value { get; set; }
}
CUSTOM VALUE RESOLVER
public class ConfigurationSettingKeyResolver : IValueResolver<ConfigurationSetting, ConfigurationSettingDTO, ConfigurationSettingKey>
{
public ConfigurationSettingKey Resolve(ConfigurationSetting source, ConfigurationSettingDTO destination, ConfigurationSettingKey key, ResolutionContext context)
{
return ConfigurationSettingKey.GetSettingKeyById(source.Key);
}
}
При реализации вышеупомянутой попытки я получаю следующее исключение при запуске:
NullReferenceException: Object reference not set to an instance of an object.
AutoMapper.Execution.TypeMapPlanBuilder.BuildResolveCall(Expression destValueExpr, IMemberMap memberMap)
Документация AutoMapper явно не явно go объясняет, как использовать этот атрибут.
РЕДАКТИРОВАТЬ: Чтобы быть более ясным, приложение падает на первой строке в следующем блоке кода в Startup.cs:
var mapperConfig = new MapperConfiguration(cfg => cfg.AddMaps(AppDomain.CurrentDomain.GetAssemblies()));
IMapper mapper = mapperConfig.CreateMapper();
services.AddSingleton(mapper);