Ich frage mich, ob ich einen grundlegenden IoC-Container aktualisieren kann, die ich benutze, um Lazy Load zu unterstützen. Wenn ich also IFoo registriert habe, möchte ich, dass der IoC-Container weiß, wie die beiden folgenden Abhängigkeiten erfüllt werden: Der erste ist der Standard, wie IoC-Container funktionieren, während der zweite einen einfachen Delegaten zurückgibt, der in den Container eines IFoo aufruft wenn es aufgerufen wird).Wie erkennen, ob ein Typ ist ein Func <T> und erhalten Sie den Typ der T
public Bar(IFoo x)
public Bar2(Func<IFoo> lazyFoo)
Das Problem kommt, wenn ich versuche, den Code zu schreiben, der dies tatsächlich tun wird. Gibt es eine Syntax, die den folgenden Pseudocode kompilieren lässt?
public T Resolve<T>()
{
if (T is Func<X>)
return (T)() => Resolve(typeof(X));
return (T)Resolve(typeof(T));
}
Oder meine Frage anders gesagt, wenn ich eine Art T
, wie haben kann ich erkennen, ob es sich um eine Instanz von Func<X>
ist, und wenn ja, was ist die Art von X
?
Tatsächlich ersetzen 'list' mit' Func' und fertig ... –
ja, wie diese es für mich tun sieht. Danke Jetzt habe ich ein Problem, dass der Compiler nicht lassen Sie mich von () => Resolve (theArgumentType) zurück auf die ursprüngliche T (auch wenn ich versuche, zuerst zum Objekt zu werfen). "Kann Lambda-Ausdruck nicht in Typ" T "umwandeln, weil es kein Delegattyp ist." –