KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I'm trying to use AutoMapper from F#, but I'm having trouble setting it up due to AutoMapper's heavy use of LINQ Expressions. Specifically, the AutoMapper type IMappingExpression<'source, 'dest> has a method with this signature: ForMember(destMember: Expression<Func<'dest, obj>>, memberOpts: Action<IMemberConfigurationExpression<'source>>) This is typically used in C# like this: Mapper.CreateMap<Post, PostsViewModel.PostSummary>() .ForMember(x => x.Slug, o => o.MapFrom(m => SlugConverter.TitleToSlug(m.Title))) .ForMember(x => x.Author, o => o.Ignore()) .ForMember(x => x.PublishedAt, o => o.MapFrom(m => m.PublishAt)); I made an F# wrapper that arranges things so that type inference can work. This wrapper allows me to translate the C# example above into something like this: Mapper.CreateMap<Post, Posts.PostSummary>() |> mapMember <@ fun x -> x.Slug @> <@ fun m -> SlugConverter.TitleToSlug(m.Title) @> |> ignoreMember <@ fun x -> x.Author @> |> mapMember <@ fun x -> x.PublishedAt @> <@ fun m -> m.PublishAt @> |> ignore This code compiles, and it seems pretty clean as far as syntax and usage. However, at runtime AutoMapper tells me this: AutoMapper.AutoMapperConfigurationException: Custom configuration for members is only supported for top-level individual members on a type. I presume this is caused by the fact that I have to convert Expr<'a -> 'b> into Expression<Func<'a, obj>> . I convert the 'b to obj with a cast, which means my lambda expression is no longer simply a property access. I get
Tags (comma-separated)
Save Edits
Cancel