Skip to content

Instantly share code, notes, and snippets.

@dbones
Created April 9, 2017 04:59
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dbones/15694f81e637f75ed25ce28c6df21ee4 to your computer and use it in GitHub Desktop.
Save dbones/15694f81e637f75ed25ce28c6df21ee4 to your computer and use it in GitHub Desktop.
public class LambdaConstructorDelegate : IConstructorDelegate
{
public Func<object[], object> Create(ServiceContract serviceContract)
{
if (serviceContract.ConstructorDelegate != null)
{
return serviceContract.ConstructorDelegate;
}
var delegateParameter = Expression.Parameter(typeof(object[]));
var infos = serviceContract.Constructor.GetParameters();
var ctorParameters = new List<Expression>();
for (int i = 0; i < infos.Length; i++)
{
var getElement = Expression.ArrayIndex(delegateParameter, Expression.Constant(i));
var castElement = Expression.Convert(getElement, infos[i].ParameterType);
ctorParameters.Add(castElement);
}
var lambda = Expression.Lambda<Func<object[], object>>(Expression.New(serviceContract.Constructor, ctorParameters), delegateParameter);
var ctor = lambda.Compile();
return ctor;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment