2017-01-23 6 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

연장 방법 다른 클래스로 확장됩니다. 귀하의 경우 HtmlHelper 유형의 Html 변수가 있으면 Html.Tooltip("foo")으로 전화 할 수 있습니다.

사용하려는 파일에 using MyLibrary.Extensions;이 필요합니다.

0

확장 메서드 확장 형식이이므로 정적 메서드로 호출하는 것은 사용 의도가 아닙니다.

당신은 전화를 할 수 있어야한다 : 심지어

HtmlHelper.Tooltip("foo") 

또는를 :보기 또는 web.config에서 다음 중 하나를 네임 스페이스가 제대로 using로 구성되어 있지만

@Html.Tooltip("foo") 

가 있는지 확인합니다.

+0

HtmlHelper.Tooltip ("foo")''HtmlHelper'가'HtmlHelper' 타입의 인스턴스가 아니면 컴파일되지 않을 것입니다. – HimBromBeere

+0

OPs 코드'MyLibrary.Extensions.Tooltip (HtmlHelper, "foo")'을 보았습니다. * 컴파일하는 유일한 방법이었습니다. –

+0

HtmlHelper 객체가 제공되지 않으면 컴파일되지 않아야합니다. 첫 번째 인수를 통해 또는 인스턴스 변수 위에 확장 메서드로 호출하여 HtmlHelper 객체를 컴파일해야합니다. "MyLibrary.Extensions.Tooltip ("foo ")"를 사용하면 OP는 매개 변수가 하나 인 메소드 호출 만 표시합니다. OP는 인스턴스 변수에서 OP를 호출하지 않는 한 분명히 실패합니다. – nikovn