CSharp · Console
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; }
}