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에 대한 코드 주석 / 확장을 계속 개발할 수 있습니다.

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

사용하는 대신 때때로 stringint, 우리는 우리 자신의 디자인의 강력한 형식의 클래스를 사용할 수 있습니다. 코드를 제어하는 ​​것처럼 보이기 때문에 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.