【问题标题】:Custom Type Converter (AutoMapper) and .NET Core自定义类型转换器 (AutoMapper) 和 .NET Core
【发布时间】:2018-08-14 06:19:10
【问题描述】:

我已使用以下指南通过我的 .NET Core Web 应用 (DI) 设置 AutoMapper:https://dotnetcoretutorials.com/2017/09/23/using-automapper-asp-net-core/

在我想使用自定义类型转换器之前,一切都很好。我做了以下:

public class TimeSpanConverter : ITypeConverter<string, TimeSpan>
{
    public TimeSpan Convert(string source, TimeSpan destination, ResolutionContext context)
    {
        return TimeSpan.Parse(source);
    }
} 

然后使用新的转换器:

CreateMap<string, TimeSpan>().ConvertUsing(new TimeSpanConverter()); 

问题是它没有被调用!我已经尝试将它移到项目之外的一个没有 DI 的简单控制台应用程序中,并且它在那里工作正常,所以它必须与它的设置方式有关。浏览了无数指南,但我最终还是一片空白。

我的映射配置文件是这样的:

public class MappingProfile : Profile
{
    public MappingProfile()
    {
        // Add as many of these lines as you need to map your objects
        CreateMap<string, TimeSpan>().ConvertUsing(new TimeSpanConverter());
        CreateMap<Channel, ChannelDto>();
        CreateMap<Location, LocationDto>();
        CreateMap<LocationDto, Location>();
        CreateMap<OperatingSchedule, OperatingScheduleDto>();
        CreateMap<OperatingSchedule, AddOperatingScheduleRequest>();
        CreateMap<AddOperatingScheduleRequest, OperatingSchedule>();
    }

    public class TimeSpanConverter : ITypeConverter<string, TimeSpan>
    {
        public TimeSpan Convert(string source, TimeSpan destination, ResolutionContext context)
        {
            return TimeSpan.Parse(source);
        }
    }
} 

在 ConfigureServices 下我有:

services.AddSingleton<HttpClient>();
services.AddTransient<ITypeConverter<string, TimeSpan>, TimeSpanConverter>();
services.AddTransient<IConfigurationRepository, ConfigurationRepositorySql>();
services.AddTransient<IDataStoreRepository, DataStoreRepositoryInflux>();
services.AddTransient<ITokenService, TokenService>();
services.AddMvc();
services.AddAutoMapper(); 

【问题讨论】:

  • 我已经有了,AutoMapper 可以在我的项目中使用——只是不能使用自定义转换器
  • 不,你没有:)
  • 嗯,我可能明白你的意思......所以基本上这就是我所缺少的? - 作为 MapperConfiguration 的单例和 - 作为 IMapper 的作用域实例?
  • 我不知道那个,但显然你没有向 AddAutoMapper 传递任何东西。而且您无缘无故地注册了类型转换器。您可能想查看测试,因为您的代码看起来不同。

标签: c# .net-core automapper


【解决方案1】:

解决了! 事实证明,一切都确实在按照第一个指南进行工作和设置。我在属性中有一个拼写错误,导致它无法映射。 自我提醒:命名时要非常勤奋......

【讨论】:

  • 这就是 AssertConfigurationIsValid 存在的原因。
猜你喜欢
  • 2012-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-13
  • 2010-10-11
  • 2022-01-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多