2017-03-08 2 views
-1

J'ai écrit les services Web dynamiques pour SOAP et REST. Vous devez maintenant créer des services Web OData dont les opérations renvoient l'interface IQueryable conformément aux spécifications du service de données WCF. Je crée une méthode dynamique basée sur des instructions IL Emit. Mais je ne suis pas en mesure d'affecter le type de retour à MethodBuilder qui est IQueryable. Pour être spécifique, je ne suis pas en mesure de définir le paramètre de retour à l'aide de la méthode MethodBuilder.SetReturnType lorsque le type de retour IQueryable est généré au moment de l'exécution. Est-ce que quelqu'un peut me fournir l'impression bleue de la génération de méthode dans le code d'émission IL?Création d'une méthode dynamique à l'aide de CIL MethodBuilder avec IQueryable <DynamicType> return type

+0

double possible de [Méthode dynamique à l'aide MethodBuilder avec le type IQueryable de retour] (http://stackoverflow.com/questions/42654679/dynamic-method-using-methodbuilder-with- iqueryabledynamictype-return-type) – thehennyy

+0

S'il vous plaît annuler la downvote .. je ne peux pas poser de nouvelles questions .. J'ai supprimé mon message original – badari

+0

Je n'ai pas voté. En tout cas malade poser la même question ici encore. Qu'est-ce qui n'est toujours pas clair? Vous devez juste passer votre objet type comme seul paramètre à la méthode SetReturnType. – thehennyy

Répondre

2

Pour créer un type générique contenant des paramètres de type inconnus jusqu'à l'exécution, vous devez utiliser la méthode Type.MakeGenericType. Votre code pourrait ressembler à ceci:

//get the dynamic type from somewhere 
Type unknownType = ...; 

//get open generic base type 
Type openGeneric = typeof(IQueryable<>); 

//create closed generic type with the unknown type as generic type parameter 
Type closedGeneric = openGeneric.MakeGenericType(unknownType); 

//use the closed type for whatever you want 
Type returnType = closedGeneric;