Je me demande si je peux mettre à niveau un conteneur IoC basique que j'utilise pour supporter une charge paresseuse. Donc, si j'ai enregistré IFoo, je voudrais que le conteneur IoC sache comment remplir les deux dépendances suivantes (la première étant la manière standard de travailler avec les conteneurs IoC, la seconde retourne un simple délégué qui appelle le conteneur pour IFoo quand il est invoqué).Comment détecter si un type est un Func <T> et obtenir le type du T
public Bar(IFoo x)
public Bar2(Func<IFoo> lazyFoo)
Le problème survient lorsque j'essaie d'écrire le code qui va réellement le faire. Existe-t-il une syntaxe qui va compiler le pseudo-code suivant?
public T Resolve<T>()
{
if (T is Func<X>)
return (T)() => Resolve(typeof(X));
return (T)Resolve(typeof(T));
}
Ou poser ma question d'une autre manière, si j'ai un type T
, comment puis-je détecter si elle est une instance de Func<X>
, et si oui, quel est le type de X
?
En effet, remplacer '' list' avec Func' et vous avez terminé ... –
oui, on dirait que cela va le faire pour moi. merci Maintenant, j'ai un problème que le compilateur ne me laissera pas lancer de () => Resolve (theArgumentType) de retour à l'original T (même si j'essaie de lancer à l'objet d'abord). "Impossible de convertir l'expression lambda en type 'T' car ce n'est pas un type délégué" –