2012-02-03 21 views
7

¿Alguien sabe cómo crear dinámicamente una instancia Func<T>?Usando Activator.CreateInstance para crear Func <T> instancias

//Create the Func type 

Type funcType = typeof(Func<>).MakeGenericType(typeof(string)); 

//How do I pass a reference to the anonymous method? 

Activator.CreateInstance(funcType,() => "test"); 

Esto no se compila:

no puede convertir la expresión lambda para escribir object[] porque no es un tipo de delegado

cualquier persona?

+5

tratar de describir lo que estamos tratando de lograr en lugar de cómo se está tratando de lograr que para el mejor oportunidad de una respuesta. – Jamiec

+0

Estoy de acuerdo con Jamiec, porque generalmente el espacio de nombres de Expression es mejor en este tipo de escenarios que la reflexión de núcleo duro. – SWeko

+0

seesharper ¿Puedes echarle un vistazo a esta ligera pregunta de inyección por favor? http://stackoverflow.com/questions/18931955/lightinject-ioc-container-throws-stackoverflow-when-resolving-type –

Respuesta

1

No creo que puedas. This blog va de alguna manera a explicar el problema. Te sugiero que busques un enfoque alternativo. ¿Puedes usar árboles de expresión en su lugar?

0

Necesita un objeto que se puede convertir en System.Object, para esto primero necesita crear un delegado como Func<String>. Por lo tanto, no tiene sentido que cree el Func<T> en tiempo de ejecución.

3

Es necesario utilizar árboles de expresión:

var func = Expression.Lambda(Expression.Constant("test")).Compile(); 
var result = func.DynamicInvoke(); 
Cuestiones relacionadas