自定义类型转换器(AutoMapper)和.NET Core

时间:2018-08-14 06:19:10

标签: c# .net-core automapper

我已使用以下指南通过.NET Core Web App(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(); 

1 个答案:

答案 0 :(得分:-1)

已解决! 事实证明,所有内容确实都可以正常工作并按照第一个指南进行设置。我在属性中输入错误,导致它无法映射。 自我注意:命名时要非常勤奋……