C# 自动映射-根据目标类型确定源类型

C# 自动映射-根据目标类型确定源类型,c#,automapper,viewmodel,C#,Automapper,Viewmodel,我继承了一个使用AutoMapper和AutoMapper.AttributesNuGet包的项目。在ViewModels中,属性上放置了[MapsFrom…]属性,以标识源属性的映射。最近,我们重新设计了应用程序的架构,将数据模型分离到一个单独的C#库中(它们都位于网站项目中),不幸的是,AutoMapper.Attributes有一个已知的错误,它破坏了[MapsFrom…]和相关属性(它们被忽略,导致ViewModel中的属性最终为空) AutoMapper.Attributes项目已被正

我继承了一个使用AutoMapperAutoMapper.AttributesNuGet包的项目。在ViewModels中,属性上放置了[MapsFrom…]属性,以标识源属性的映射。最近,我们重新设计了应用程序的架构,将数据模型分离到一个单独的C#库中(它们都位于网站项目中),不幸的是,AutoMapper.Attributes有一个已知的错误,它破坏了[MapsFrom…]和相关属性(它们被忽略,导致ViewModel中的属性最终为空)

AutoMapper.Attributes项目已被正式放弃,所有者不再推荐其使用含义此错误将永远无法修复,您可以在此处阅读:

也就是说,我们有一个代码块,它接受ViewModel类型,检查该类型上的自定义属性,查找[MapsFrom…],并使用它来确定该ViewModel的源类型。我们不知道运行时的源类型,需要从AutoMapper映射确定对象的源类型(即通过CreateMap(…)设置为源的实体框架数据库集)。事实证明,这是一个难以解决的问题,经过大量的研究,我现在向你们寻求帮助

我所拥有的:

这是该方法当前的样子,显然这将不再有效,因为我们必须删除[MapsFrom…]属性:

    internal static Type GetSourceType(Type viewModelType)
    {
        if (!(viewModelType.GetCustomAttributes(typeof(MapsFromAttribute), true).FirstOrDefault() is MapsFromAttribute mapsFromAttribute))
        {
            throw new Exception("The view model class named " + $"{viewModelType.Name} is not decorated with MapsFrom attribute");
        }

        var destinationType = mapsFromAttribute.SourceType;
        return destinationType;
    }
我需要什么:

我需要修改上述方法,以便在将ViewModel类型传递给该方法时,我可以提取映射到该ViewModel的源类型。如果我们有以下映射,请参见一个示例:

  CreateMap<User, UserViewModel>();

请注意:我们使用的是AutoMapper 8.0版,我们所有的CreateMap(…)语句都在Profile类中,我们不再使用属性

TypeMap typeMap = AutoMapper.Mapper.Instance.ConfigurationProvider.FindTypeMapFor(TDto, TEntity>();