Automapper 5.0.0缺少SourceValue(自定义转换器)

Lyu*_*hev 5 c# automapper

将automapper版本从4.2.1更新到5.0.0后,我收到了缺少SourceValue的编译错误。这是我的例子

 public class DraftLayoutCellPropertiesConverter : ITypeConverter<DraftLayoutCell, DraftGamePeriodDraftLayoutViewModel>
    {
        public DraftGamePeriodDraftLayoutViewModel Convert(ResolutionContext context)
        {
            var input = context.SourceValue as DraftLayoutCell;
            var result = new DraftGamePeriodDraftLayoutViewModel();

            if (input != null)
            {
Run Code Online (Sandbox Code Playgroud)

该财产的替换应该是什么?这是做定制转换器的最佳方法吗?我期望此更新不会破坏现有代码,因为有很多人在使用该应用程序。

K. *_*R. 5

在 Automapper 5 中,接口ITypeConverter发生了变化,您需要更新您的实现:

public class DraftLayoutCellPropertiesConverter : ITypeConverter<DraftLayoutCell, DraftGamePeriodDraftLayoutViewModel>
{
    public DraftGamePeriodDraftLayoutViewModel Convert(DraftLayoutCell source, DraftGamePeriodDraftLayoutViewModel destination, ResolutionContext context)
    {
        var input = source;
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)


MaK*_*MKo -1

正如我所看到的,ITypeConverter有以下声明:

public interface ITypeConverter<in TSource, out TDestination>
{
    TDestination Convert(TSource source, ResolutionContext context);
}
Run Code Online (Sandbox Code Playgroud)

看起来你错误地实现了这个接口。

一旦你正确实现了它,你就可以使用TSource source参数来访问你的SourceValue

关于你的问题“这是执行自定义转换器转换器的最佳方法”,: if you need to use the custom那么你肯定需要为其实现上面的接口。但是,这取决于您的情况,有时您可能需要使用自定义值提供程序,它可以像转换器一样使用。