J'ai créé cette méthode qui est une usine d'objet:
T.Equals(typeof(ILookupService))
4 Réponses :
Vous pouvez utiliser par exemple < / p> typeof (t) code> pour obtenir un type code> objet arrière qui pourrait remplacer l'utilisation de ServiceInterface code>
Bon sang, maintenant je suis gêné! Soooo simple! Merci un bouquet jarré!
Bien sûr, mais cela sera-t-il égal à une interface? Si T représente le type d'objet concret, il ne s'agira probablement pas d'une interface.
@Spender, la méthode de récupération peut tout aussi d'être invoquée avec une interface. Par exemple gettervis
Ok convenu, mais ça send de la seconde
@Spender, c'est en fait un modèle bien défini et utilisé en MEF. CompositionContainer Code> a cette API et généralement ils sont basés sur une interface.
Pour moi, cela semble être un détournement de génériques de démarrer votre méthode générique avec des vérifications pour des types / interfaces particuliers
@spender Je pensais que vous vous plaingiez sur le site d'appel, pas le code réel. Le code actuel est également un modèle commun cependant (pensez com ou ole iserviceProvider). Perahps n'est pas un excellent, mais un établi existant.
@Spender - Quel est le problème avec mon code en particulier? Que proposeriez-vous de changer?
Andrey, il n'y a probablement rien de mal. Je viens de trouver une utilisation inhabituelle de génériques lorsque la méthode branche en fonction du type générique fourni. Dans cette situation, je créerais simplement deux méthodes non génériques de type fixe. J'apprécie (des commentaires de Jared) que cela ne convient pas à vos besoins.
Je dois avoir une méthode - c'est finalement une usine d'objet de service, donc je fournis une interface et retournera un objet correspondant. Je pensais que l'utilisation de génériques dans ce cas, même si peu conventionnelle, a l'air "plus agréable" dans le code que de retourner un objet, puis de lancer une interface
Utilisez donc, p> typeof (t) code>.
pourrait le est opérateur être applicable ici? P >
est code> s'applique à objets i> pas classes i>, donc non, cela ne donnerait pas à la puissance d'une solution. Il pourrait peut-être être utilisé dans sa conception originale, mais pas lors de la suppression du paramètre.
if (typeof(IMemberService).IsAssignableFrom(typeof(T)))
{}
else if (typeof(ILookupService).IsAssignableFrom(typeof(T)))
{}
Combinez cette réponse ( isAssignAdFrom code>) avec la réponse de JaredPar et vous aurez la solution complète.
Quel est le problème avec ma solution originale? J'ai besoin de savoir si le type est passé correspondant exactement à l'interface que je comparais à
Vous pouvez choisir la valeur de ServiceInterface Variable comme ceci -> Stackoverflow.com/a/44114122/1580548