Resharper에게 메소드 매개 변수가 CSS 클래스를 포함하는 문자열임을 어떻게 알립니 까?


118

[css 클래스의 HTMLHelper 속성에 intellisense 사용]

이 HTMLhelper가 있습니다.

public IHtmlString MyTextBoxFor<TModel, TProperty>(
    this HtmlHelper<TModel> html, 
    Expression<Func<TModel, TProperty>> propertyExpression, 
    string cssClass)
{
    // ...
}

"cssClass"매개 변수의 값을 전달할 때 Resharper가 내 애플리케이션에 정의 된 CSS 클래스에 IntelliSense를 제공하기를 원합니다.

Resharper가 인식하는 몇 가지 코드 주석 속성이 있지만 메서드 매개 변수를 CSS 클래스로 표시하는 것과 직접적으로 관련된 것은 없습니다.

내가 찾을 수있는 가장 가까운 것은 [HtmlAttributeValue (string name)] 입니다. 다음과 같이 cssClass 매개 변수에 적용하려고했습니다.

public IHtmlString MyTextBoxFor<TModel, TProperty>(
    this HtmlHelper<TModel> html, 
    Expression<Func<TModel, TProperty>> propertyExpression, 
    [HtmlAttributeValue("class")] string cssClass)
{
    // ...
}

그러나 그것은 작동하지 않습니다. Resharper가 입력 된 클래스를 인식하고 jQuery 선택기 표현식 (위의 도우미가 생성 한 텍스트 상자에서 작동하는)의 알 수없는 CSS 클래스에 대해 저를 괴롭히는 것을 중지한다면 정말 멋질 것입니다.

편집 : 다음은 작업 메서드의 "htmlAttributes"매개 변수에 대해 작동하는 일종의 인텔리 센스 스크린 샷입니다. 이는 매개 변수에 [HtmlElementAttributes] 주석을 사용하여 수행됩니다.

Resharper htmlAttributes intellisense

CSS 클래스를 문자열 매개 변수에 넣고 CSS 클래스를 표시하는 동일한 인텔리전스가 나타나는 유사한 주석을 원합니다.


10
: 문제 ReSharper에서의 bugtracker에 오픈 youtrack.jetbrains.com/issue/RSRP-389238
— Raif 아 테프

4
좋은 질문입니다. 답도 알고 싶습니다.
— Murtaza Munshi 2015 년

2
@RaifAtef는 ReSharper에 이미 존재합니다. 당신이 말하는 것에 대한 스크린 샷을 추가하고 stackoverflow.com/questions/529677/…
— Seabizkit 2015-10-15

2
@Seabizkit는 "return View ("를 작성하고 뷰 이름으로 인텔리 센스를 얻거나 "Html.Action ("을 호출하고 컨트롤러 및 액션 이름에 대한 인텔리 센스를 얻을 때 얻는 인텔리 센스와 유사합니다. 내가 cssClass 매개 변수에 대한 값을 입력 할 때 resharper가 CSS 클래스를 표시하도록하고 싶습니다. 편집 : 내 질문은 귀하의 질문과 다릅니다. 귀하의 질문은 내장 된 VS 항목이며, 내 질문은 엄격하게 resharper 관련입니다.
— Raif Atef

3
@RaifAtef, Ok .. 문제는 ReSharper를 분명히 가지고 있지만 ReSharper의 어떤 기능에 대해 이야기하고 있는지 알 수 없다는 것입니다. 일반적인 내장 인텔리 센스가 보입니다 ... 나는 진심으로 관심이 있습니다. ReSharper 마법을 놓쳤지만 볼 수 없습니다. 내가 봐야 할 것의 스크린 샷을 게시 해 주시겠습니까? 나는 및 "Html.MyCustomStuff"둘 사이에 어떤 차이를 볼 수 없습니다 "(Html.Action"로 시도 최신의 하나처럼 어떤 ReSharper에서 9.1.3를 사용하여..
— Seabizkit

답변:


3

[ValueProvider] 사용

Resharper 10에서 현재 지원 하는 코드 주석 중에서 가장 적합한 후보는이 속성을 사용하는 것입니다. 위 링크에서 :

ValueProviderAttribute

제한된 값 세트 중 하나가 될 것으로 예상되는 매개 변수의 경우. 이 매개 변수의 값으로 사용되어야하는 유형의 필드를 지정하십시오.

불행히도 나는 그것이 어떻게 작동하는지 이해하지 못했습니다. 내 Resharper 버전 9.2에서는 버그가있을 수 있습니다.

지금까지 시도한 것 :

namespace ValueProviderSample
{
    public static class MyValuesContainer
    {
        public static readonly string[] Values = { "one", "two", "three" };
    }

    public class MyMethodContainer
    {
        public string MyMethod([ValueProvider("ValueProviderSample.MyValuesContainer.Values")]
                               string parameter)
        {
            return string.Empty;
        }
    }
}

제대로 작동하더라도 값 목록을 채워야합니다.

물론 Resharper에 대한 코드 주석 / 확장을 계속 개발할 수 있습니다.

문자열 대신 강력한 형식의 개체를 사용하지 않는 이유는 무엇입니까?

사용하는 대신 때때로 string와 int, 우리는 우리 자신의 디자인의 강력한 형식의 클래스를 사용할 수 있습니다. 코드를 제어하는 ​​것처럼 보이기 때문에 stringCSS 이름 을 사용 하는 대신 CssClass.

프로젝트의 모든 CSS를 구문 분석하고 다음과 같은 클래스를 동적으로 생성하는 생성기에 대한 호출을 미리 빌드 된 이벤트로 추가하기 만하면됩니다.

public class CssClass
{
    public string Name { get; private set; }

    public static CssClass In = new CssClass("in");

    /// <summary>
    /// Initialise une nouvelle instance de la classe <see cref="T:System.Object"/>.
    /// </summary>
    private CssClass(string name)
    {
        Name = name;
    }
}

그러면 샘플이 다음과 같이 보일 것입니다.

public class MySample
{
    public IHtmlString MyTextBoxFor<TModel, TProperty>(
        this HtmlHelper<TModel> html,
        Expression<Func<TModel, TProperty>> propertyExpression,
        CssClass cssClass)
    {
        // ...
    }

    public void Usage()
    {
        MyTextBoxFor(html, expression, CssClass.In);
    }
}

이것은 흥미롭지 만 모든 CSS 파일에서 앱이 사용하는 모든 CSS 클래스를 갖지 않기 때문에 질문에 답하지 않습니다.
— Raif Atef
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.