2017-01-23 3 views
0

Ich habe eine Klassenbibliothek, die ein paar Extensions Methoden Klassen enthält. Das Problem, dem ich momentan gegenüberstehe, ist, wenn ich versuche, eine Erweiterungsmethode von einem anderen Projekt aufzurufen, das auf die Bibliothek verweist, die nicht kompiliert wird, wenn ich die erweiterte Klasse nicht als Parameter übergebe.Klassenbibliothek Erweiterungsmethoden, dieses Schlüsselwort nicht auf die richtige Quelle

Funktionsdefinition

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

die erwartete Art und Weise einen Funktionsaufruf machen

MyLibrary.Extensions.Tooltip("foo") 

das Problem, das ich habe (der einzige Weg, es kompiliert)

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

Das ist nicht, wie Extension-Methoden funktionieren sollen ... Wo ist die Instanz von 'HtmlHelper'? –

+2

Lassen Sie das 'this'-Schlüsselwort für einen Versuch aus. Wie würdest du die statische Methode dann nennen? Sie benötigen eine Instanz vom Typ 'HtmlHelper' gemäß der Methodensignatur. – HimBromBeere

+0

Ist Ihr erstes Beispiel "MyLibrary.Extensions.Tooltip (" foo ")" für eine Instanzvariable vom Typ HtmlHelper? Wenn ja, fügen Sie bitte die gesamte Codezeile hinzu, um sicherzugehen. – nikovn

Antwort

1

Eine Erweiterungsmethode erweitert eine andere Klasse. Also in Ihrem Fall, eine Variable Html des Typs HtmlHelper gegeben, können Sie Html.Tooltip("foo") aufrufen.

Sie benötigen eine in der Datei, in der Sie das verwenden möchten.

0

Erweiterungsmethoden extend schließen Arten, so dass sie als eine statische Methode aufrufen, ist nicht, wie die Verwendung beabsichtigt ist.

sollten Sie in der Lage sein zu nennen:

HtmlHelper.Tooltip("foo") 

Oder auch:

@Html.Tooltip("foo") 

Achten Sie darauf, wenn der Namespace als using richtig konfiguriert ist: entweder aus Ihrer Sicht oder aus den web.config.

+0

"' HtmlHelper.Tooltip ("foo") '" wird nicht kompiliert, außer 'HtmlHelper' war eine Instanz des Typs' HtmlHelper'. – HimBromBeere

+0

Es scheint zu OP-Code 'MyLibrary.Extensions.Tooltip (HtmlHelper," foo ")', die * war die einzige Art und Weise kompiliert *. –

+0

Es sollte immer noch nicht kompiliert werden, wenn kein HtmlHelper-Objekt angegeben wird - sei es durch das erste Argument oder durch Aufrufen als eine Erweiterungsmethode über einer Instanzvariablen. Mit "MyLibrary.Extensions.Tooltip (" foo ")" OP zeigt nur einen Methodenaufruf mit nur 1 Parameter, offensichtlich sollte es fehlschlagen, es sei denn, OP hat den Teil weggelassen, wo er es für eine Instanzvariable aufruft. – nikovn

Verwandte Themen