2012-02-03 10 views
7

Czy ktoś wie, jak dynamicznie utworzyć instancję Func<T>?Korzystanie z Activator.CreateInstance do tworzenia instancji Func <T>

//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"); 

nie kompilacji:

Nie można przekonwertować wyrażenie lambda wpisać object[] ponieważ nie jest to typ delegata

Anyone?

+5

Postaraj się opisać, co starasz się osiągnąć, a nie, jak starasz się go osiągnąć dla lepszej szansy na odpowiedź. – Jamiec

+0

Zgadzam się z Jamcem, ponieważ zazwyczaj przestrzeń nazw Express jest lepsza w tego rodzaju scenariuszach niż twarde odbicie. – SWeko

+0

seesharper czy możesz rzucić okiem na to pytanie z lekkim wstrzyknięciem? http://stackoverflow.com/questions/18931955/lightinject-ioc-container-throws-stackoverflow-when-resolving-type –

Odpowiedz

1

Nie sądzę, że możesz. This blog idzie w jakiś sposób do wyjaśnienia problemu. Proponuję szukać alternatywnego podejścia. Czy możesz zamiast tego użyć drzewek wyrażeń?

0

Potrzebujesz obiektu, który można przekonwertować na System.Object, w tym celu najpierw musisz utworzyć delegata takiego jak Func<String>. Więc nie ma powodu, aby utworzyć Func<T> w czasie wykonywania.

3

Musisz użyć wyrażenia drzew:

var func = Expression.Lambda(Expression.Constant("test")).Compile(); 
var result = func.DynamicInvoke(); 
Powiązane problemy