Я пытаюсь создать реализацию автоматических фабрик делегатов в стиле Autofac, которая будет работать с AOT (в частности, Unity3d и IL2CPP).
Основная проблема, с которой я столкнулся, заключается в невозможности привести от Func<object, object>
к Func<T1, TResult>
во время выполнения.
Есть ли какой-нибудь способ сделать это с помощью отражения, но избежать генерации кода IL во время выполнения (т.е. без Reflection.Emit)?
Func<object, object> func = delegate (object arg1)
{
return arg1.ToString() + " bar";
};
Func<string, string> func2;
func2 = (Func<string, string>)func;
Console.WriteLine(func2("foo")); // "foo bar" ? :(
// System.InvalidCastException: Unable to cast object of type 'System.Func`2[System.Object,System.Object]' to type 'System.Func`2[System.String,System.String]'.