Créer dynamiquement un type générique pour le modèle
Je suis à la programmation de la WCF à l'aide de la ChannelFactory qui s'attend à un type pour appeler la CreateChannel méthode. Par exemple:
IProxy proxy = ChannelFactory<IProxy>.CreateChannel(...);
Dans mon cas, je suis en train de faire le routage, donc je ne sais pas quel type de ma chaîne en usine. Je peux analyser un en-tête de message pour déterminer le type, mais j'ai frappé un mur de briques il, parce que même si j'ai une instance de Type, je ne peux passer que lorsque ChannelFactory s'attend à un type générique.
Une autre façon de retraitement ce problème de manière très simple serait que je suis en train de faire quelque chose comme ceci:
string listtype = Console.ReadLine(); //say "System.Int32"
Type t = Type.GetType( listtype);
List<t> myIntegers = new List<>(); //does not compile, expects a "type"
List<typeof(t)> myIntegers = new List<typeof(t)>(); //interesting - type must resolve at compile time?
Est là une approche de ce que je peux exploiter dans C#?
source d'informationauteur t3rse
Vous devez vous connecter pour publier un commentaire.
Ce que vous cherchez est MakeGenericType
Donc ce que vous faire est de mettre le type de définition du générique de "modèle" de la classe, puis la construction d'une spécialisation du type à l'aide de votre runtime-types de conduite.
Vous devriez regarder ce post de Ayende: WCF, la Moquerie et le Cio: Oh MON dieu!. Quelque part près du bas est une méthode appelée GetCreationDelegate ce qui devrait aider. Il fait ceci:
Voici une question: avez-vous vraiment besoin de créer un canal avec exactement le type de contrat dans votre cas particulier?
Puisque vous êtes en train de faire du routage, il ya une très bonne chance que vous pourriez tout simplement de traiter avec le canal générique formes. Par exemple, si vous êtes de routage d'un seul message, vous pouvez créer un canal pour envoyer le message comme ceci:
Si vous avez besoin de l'envoyer à un tel service, il suffit d'utiliser IRequestChannel à la place.
Si vous êtes en train de faire du routage, il est, en général, beaucoup plus facile de traiter avec canal générique formes (avec un générique fourre-tout contrat de service à l'extérieur) et assurez-vous que le message que vous envoyez a tous le droit de les en-têtes et les propriétés.