加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 自动发现automapper配置

发布时间:2020-12-16 03:58:41 所属栏目:asp.Net 来源:网络整理
导读:在MVC中创建控制器时,您无需为其进行任何其他注册.添加区域也是如此.只要您的global.asax具有AreaRegistration.RegisterAllAreas()调用,就不需要进行其他设置. 使用AutoMapper,我们必须使用某种CreateMap TSource,TDestination来注册映射.呼叫.可以使用静态M
在MVC中创建控制器时,您无需为其进行任何其他注册.添加区域也是如此.只要您的global.asax具有AreaRegistration.RegisterAllAreas()调用,就不需要进行其他设置.

使用AutoMapper,我们必须使用某种CreateMap< TSource,TDestination>来注册映射.呼叫.可以使用静态Mapper.CreateMap显式执行这些操作,或者从AutoMapper.Profile类派生,重写Configure方法,并从那里调用CreateMap.

在我看来,应该能够扫描一个程序集,从类似于MVC扫描的类扩展到从Controller扩展的类.使用这种机制,不应该仅仅通过创建一个派生自Profile的类来创建映射吗?是否存在任何此类库工具,或者是否存在内置于automapper中的内容?

解决方法

我不知道这样的工具是否存在,但写一个应该是非常简单的:

public static class AutoMapperConfiguration
{
    public static void Configure()
    {
        Mapper.Initialize(x => GetConfiguration(Mapper.Configuration));
    }

    private static void GetConfiguration(IConfiguration configuration)
    {
        var assemblies = AppDomain.CurrentDomain.GetAssemblies();
        foreach (var assembly in assemblies)
        {
            var profiles = assembly.GetTypes().Where(x => x != typeof(Profile) && typeof(Profile).IsAssignableFrom(x));
            foreach (var profile in profiles)
            {
                configuration.AddProfile((Profile)Activator.CreateInstance(profile));
            }
        }
    }
}

然后在你的Application_Start中你可以自动装配:

AutoMapperConfiguration.Configure();

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读