【问题标题】:How can I find the automapper profiles from the mapping?如何从映射中找到自动映射器配置文件?
【发布时间】:2018-02-12 16:06:42
【问题描述】:

我有很多映射配置文件,如何从源代码中的特定映射操作中找到正确的映射配置? Resharper 或 Visual Studio 扩展可以提供帮助吗?

我想跳过这个:

var userDto = this.mapper.Map<User, UserDto>(user);

到这里:

MapperConfiguration config = new MapperConfiguration(cfg =>
{
    cfg.CreateMap<User, UserDto>(MemberList.None);
    /*etc...*/
});

有可能吗?我怎么能意识到呢?

【问题讨论】:

  • 可以使用 all references 的 User 或 UserD 就足够了吗?当然,其中一个引用将在 CreateMap 方法中。
  • 除此之外,我个人倾向于将映射隔离在自己的文件中,并且每次都用相同的后缀命名它们。这样,我可以搜索 UserProfile 并 100% 确定我最终会找到正确的类文件。
  • @plog17,在一个有 99 多个引用的大型项目中,这不是替代方案。我为每个域对象都有一个类,它有很多方法。我可以在不到 20 秒的时间内找到映射,但没有任何自动方式:(
  • 哦,我明白了,我发布了一个替代方案,它依赖于您的个人资料的命名约定。事实证明,这对我一直在从事的项目来说已经足够了。老实说,我也对人们可以提出什么来简化这种操作很感兴趣。

标签: c# automapper visual-studio-extensions


【解决方案1】:

如何在自己的类中隔离您的映射。

public class UserProfile: Profile
{
    public UserProfile()
    {
       CreateMap<User, UserDto>(MemberList.None);
    }
}

您的个人资料注册可能不同,但可以通过以下方式动态注册。

public class MapperProvider
{
    private readonly Container container;

    public MapperProvider(Container container)
    {
        this.container = container;
    }

    public IMapper GetMapper()
    {
        var mce = new MapperConfigurationExpression();
        mce.ConstructServicesUsing(container.GetInstance);

        MapperConfiguration mc = GetMapperConfiguration(mce);
        IMapper m = new Mapper(mc, t => container.GetInstance(t));

        return m;
    }

    public static MapperConfiguration GetMapperConfiguration(MapperConfigurationExpression mce)
    {
        var profiles = typeof(ApplicationProfile).Assembly.GetTypes()
            .Where(t => typeof(Profile).IsAssignableFrom(t))
            .ToList();

        mce.AddProfiles(profiles);

        var mc = new MapperConfiguration(mce);
        mc.AssertConfigurationIsValid();
        return mc;
    }
}

这样,您可以按名称搜索该配置文件类,并轻松导航到您的映射。

如果您知道用户映射在 UserProfile 类中,它将起作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-10
    • 1970-01-01
    • 2012-01-10
    • 1970-01-01
    • 2012-07-28
    相关资源
    最近更新 更多