2017-01-23 8 views
0

У меня есть библиотека классов, которая содержит несколько классов методов расширений. Проблема, с которой я столкнулся в данный момент, - это когда я пытаюсь вызвать метод расширения из другого проекта, который ссылается на библиотеку, которую он не компилирует, если я не передаю расширенный класс в качестве параметра.Методы расширения библиотеки классов, это ключевое слово, не указывающее на правильный источник

определение функции

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

ожидаемый способ сделать вызов функции

MyLibrary.Extensions.Tooltip("foo") 

Проблема у меня есть (единственный способ компилирует)

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

Это не то, как должны работать методы расширения ... Где экземпляр «HtmlHelper»? –

+2

Опустите ключевое слово 'this' для попытки. Как бы вы тогда вызвали статический метод? Вам нужен экземпляр типа «HtmlHelper» в соответствии с сигнатурой методов. – HimBromBeere

+0

Это ваш первый пример «MyLibrary.Extensions.Tooltip (« foo »)», используемый для переменной экземпляра типа HtmlHelper? Если да, укажите, пожалуйста, всю строку кода. – nikovn

ответ

1

Способ расширения удлиняет какой-либо другой класс. Так что в вашем случае, учитывая переменную Html типа HtmlHelper, вы можете позвонить по телефону Html.Tooltip("foo").

Вам нужен using MyLibrary.Extensions; в файле, где вы хотите его использовать.

0

Удлинительные методы удлиняют близкие типы, поэтому называть их статическим методом не так, как предполагается использование.

Вы должны быть в состоянии назвать:

HtmlHelper.Tooltip("foo") 

Или даже:

@Html.Tooltip("foo") 

Убедитесь, хотя пространство имен сконфигурирован как using правильно: либо с вашей точки зрения или с web.config.

+0

"' HtmlHelper.Tooltip ("foo") '' не будет компилироваться, если только 'HtmlHelper' не был экземпляром типа' HtmlHelper'. – HimBromBeere

+0

Который, кажется, смотрит на код OP 'MyLibrary.Extensions.Tooltip (HtmlHelper," foo ")', который был * единственным способом компиляции *. –

+0

Он по-прежнему не должен компилироваться, если не задан объект HtmlHelper - будь то через первый аргумент или путем вызова его как метода расширения поверх переменной экземпляра. С «MyLibrary.Extensions.Tooltip (« foo »)« OP только показывает вызов метода только с одним параметром, очевидно, что он должен завершиться неудачно, если OP не опустил ту часть, где он называет ее переменной экземпляра. – nikovn