.NET Fiddle

CSharp · Console

/Program.cs

using System;
using System.Linq.Expressions;

public class Program
{
	public static void Main()
	{
		
		Model m = new Model {Value = 47};
		
		
		var iRequest = Mapper.CreateRequest<RequestInt>().From(m);
		
		
		Console.WriteLine(iRequest.Data);
	}
	
	
}


public class Model
{
	public int Value {get;set;}
}

// For Syntax safety.
public interface IRequest
{
}
public interface IRequest<T> : IRequest
{
	T Data { get; set;}
}

public static class Mapper 
{ 
    public static TOut CreateRequest<TOut>() where TOut : IRequest, new() 
    {
		return new TOut();
    }
	
	public static IRequest<TDto> From<TDto,TModel>(this IRequest<TDto> request, TModel data)
	{
		request.Data=Map<TModel,TDto>(data);
		return request;
	}
	
	
	
	
	public static TOut Map<TIn,TOut>(TIn input)
	{
		// Only for this example, you need to provide your own implemenation.
		return (TOut)(object)((Model)(object)input).Value;
	}

}

public class RequestInt : IRequest<int>
{
    public int Data { get; set; }
}
;