using System.Linq.Expressions;
public static void Main()
Model m = new Model {Value = 47};
var iRequest = Mapper.CreateRequest<RequestInt>().From(m);
Console.WriteLine(iRequest.Data);
public int Value {get;set;}
public interface IRequest
public interface IRequest<T> : IRequest
public static class Mapper
public static TOut CreateRequest<TOut>() where TOut : IRequest, new()
public static IRequest<TDto> From<TDto,TModel>(this IRequest<TDto> request, TModel data)
request.Data=Map<TModel,TDto>(data);
public static TOut Map<TIn,TOut>(TIn input)
return (TOut)(object)((Model)(object)input).Value;
public class RequestInt : IRequest<int>
public int Data { get; set; }