private object ConvertOneHop(Type signature, object app)
{
if (signature.IsInstanceOfType(app))
{
return app;
}
if (typeof(Delegate).IsAssignableFrom(signature))
{
Delegate memberDelegate = ToMemberDelegate(signature, app);
if (memberDelegate != null)
{
return memberDelegate;
}
}
foreach (KeyValuePair<Tuple<Type, Type>, Delegate> conversion in _conversions)
{
Type returnType = conversion.Key.Item1;
Type parameterType = conversion.Key.Item2;
if (parameterType.IsInstanceOfType(app) &&
signature.IsAssignableFrom(returnType))
{
return conversion.Value.DynamicInvoke(app);
}
}
return null;
}