asp.net-mvc-3 - MVC 3 : AutoMapper and Project/Solution Structure

标签 asp.net-mvc-3 automapper projects-and-solutions

我刚刚开始在我的 MVC 3 项目中使用 AutoMapper,我想知道这里的人们在使用它时如何构建他们的项目。我创建了一个 MapManager ,它只有一个 SetupMaps 方法,我在 global.asax 中调用该方法来创建初始 map 配置。我还需要为我的映射之一使用 ValueResolver。对我来说,这个特定的 ValueResolver 将在几个不同的地方需要,并且只会从 Article.GenerateSlug 返回一个值。

所以我的问题是:

  1. 如何管理所有 map 的初始创建 (Mapper.CreateMap)?
  2. 您将 ValueResolver 的类放在项目中的什么位置?您是否在模型文件夹下创建子文件夹或完全在其他文件夹下?

感谢您的帮助。

最佳答案

我不会谈论问题 2,因为它确实是个人喜好,但对于问题 1,我通常使用一个或多个 AutoMapper.Profile 来保存我所有的 Mapper.CreateMap用于特定目的(域到 View 模型等)。

public class ViewModelToDomainAutomapperProfile : Profile
{
    public override string ProfileName
    {
        get
        {
            return "ViewModelToDomain";
        }
    }

    protected override void Configure()
    {
        CreateMap<TripRegistrationViewModel, TripRegistration>()
            .ForMember(x=>x.PingAttempts, y => y.Ignore())
            .ForMember(x=>x.PingResponses, y => y.Ignore());
    }
}

然后我创建一个 Bootstrap (IInitializer) 来配置映射器,添加我的所有配置文件。

public class AutoMapperInitializer : IInitializer
{
    public void Execute()
    {
        Mapper.Initialize(x =>
                            {
                                x.AddProfile<DomainToViewModelAutomapperProfile>();
                                x.AddProfile<ViewModelToDomainAutomapperProfile>();
                            });
    }
}

然后在我的 global.asax 中,我获取了 IInitializer 的所有实例,并循环运行 Execute()

foreach (var initializer in ObjectFactory.GetAllInstances<IInitializer>())
            {
                initializer.Execute();
            }

这是我的总体策略。

<小时/>

根据要求,这里是最后一步的反射实现。

var iInitializer = typeof(IInitializer);

List<IInitializer> initializers = AppDomain.CurrentDomain.GetAssemblies()
    .SelectMany(s => s.GetTypes())
    .Where(p => iInitializer.IsAssignableFrom(p) && p.IsClass)
    .Select(x => (IInitializer) Activator.CreateInstance(x)).ToList();

foreach (var initializer in initializers)
{
    initializer.Execute();
}

关于asp.net-mvc-3 - MVC 3 : AutoMapper and Project/Solution Structure,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6699118/

相关文章:

asp.net-mvc-3 - 如何让 User.Identity 在 Controller 外工作

jquery - Javascript block 在 mvc3 razor 模板中呈现为 html 实体字符串

c# - 如何映射多对多关系?

c# - 如何使用 Unity 注册 AutoMapper 配置文件

visual-studio - 如何在 Visual Studio 中重命名项目文件夹?

visual-studio - 在解决方案之间复制 Visual Studio 项目

c# - MusicStore 'System.Data.Objects.ObjectSet<....>' 不包含 'Add' 的定义并且没有扩展方法 'Add' 接受第一个参数

c# - Entity Framework 代码优先中的奇怪实体更新

asp.net-mvc - Automapper 映射列表变为 0

c# - 无法找到 ASP.NET 5 类库项目并将其添加到解决方案中