2017-01-23 1 views
0

J'ai une bibliothèque de classes qui contient quelques classes de méthodes d'extensions. Le problème auquel je suis actuellement confronté est lorsque j'essaie d'invoquer une méthode d'extension à partir d'un autre projet référençant la bibliothèque, elle ne compile pas à moins que je passe la classe étendue en paramètre.Méthodes d'extension de bibliothèque de classes, ce mot clé ne pointe pas vers la bonne source

définition de la fonction

public static MvcHtmlString Tooltip(this HtmlHelper @this, string tooltip) 
    { 
     return new MvcHtmlString([email protected]" <i class=""fa fa-question-circle"" title=""{tooltip}""></i>"); 
    } 

la manière attendue de faire un appel de fonction

MyLibrary.Extensions.Tooltip("foo") 

le problème que j'ai (la seule façon compile)

MyLibrary.Extensions.Tooltip(HtmlHelper,"foo") 
+2

Les méthodes d'extension ne sont pas censées fonctionner ... Où se trouve l'instance de 'HtmlHelper'? –

+2

Omettez le mot clé "this" pour essayer. Comment appelleriez-vous la méthode statique alors? Vous avez besoin d'une instance de type 'HtmlHelper' selon la signature des méthodes. – HimBromBeere

+0

Votre premier exemple "MyLibrary.Extensions.Tooltip (" foo ")" est-il utilisé sur une variable d'instance de type HtmlHelper? Si oui, veuillez inclure toute la ligne de code juste pour être sûr. – nikovn

Répondre

1

Une méthode d'extension étend une autre classe. Donc dans votre cas, étant donné une variable Html de type HtmlHelper, vous pouvez appeler Html.Tooltip("foo"). Vous avez besoin d'un using MyLibrary.Extensions; dans le fichier où vous voulez l'utiliser.

0

Méthodes d'extension étendre fermer les types, donc les appeler comme une méthode statique n'est pas la façon dont l'utilisation est prévue.

Vous devriez pouvoir appeler:

HtmlHelper.Tooltip("foo") 

Ou encore:

@Html.Tooltip("foo") 

Assurez-vous que l'espace de noms est configuré comme using correctement: soit dans votre point de vue ou de la web.config.

+0

"' HtmlHelper.Tooltip ("foo") '" ne compilera pas sauf si 'HtmlHelper' est une instance de type' HtmlHelper'. – HimBromBeere

+0

Ce qui semble être en regardant le code OP MyLibrary.Extensions.Tooltip (HtmlHelper, "foo") ', qui était * la seule façon dont il compile *. –

+0

Il ne devrait pas encore compiler s'il ne reçoit pas d'objet HtmlHelper - que ce soit par le premier argument, ou en l'appelant comme une méthode d'extension au-dessus d'une variable d'instance. Avec "MyLibrary.Extensions.Tooltip (" foo ")" OP ne montre qu'un appel de méthode avec un seul paramètre, il devrait évidemment échouer, sauf si OP a omis la partie où il l'appelle sur une variable d'instance. – nikovn