c# - net - visual studio 2017 generate documentation



Comment dites-vous à Resharper qu'un paramètre de méthode est une chaîne contenant une classe CSS? (1)

[Activer intellisense sur l'attribut HTMLHelper pour les classes css]

J'ai cet HTMLhelper:

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

Je veux que Resharper me donne des classes IntelliSense pour CSS définies dans mon application lors du passage de la valeur du paramètre "cssClass".

Certains attributs d'annotation de code sont reconnus par Resharper, mais aucun ne semble directement lié au marquage d'un paramètre de méthode comme étant des classes CSS.

Le plus proche que j'ai pu trouver était [HtmlAttributeValue (string name)] . J'ai essayé d'appliquer au paramètre cssClass comme ceci:

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

Mais ça ne marche pas. Ce serait aussi super génial si Resharper reconnaissait la classe entrée et arrête de m'embêter sur les classes CSS inconnues dans les expressions de sélecteur jQuery (qui opèrent sur la zone de texte générée par l'assistant ci-dessus).

Edit: Voici une capture d'écran du type d'intellisense qui fonctionne pour le paramètre "htmlAttributes" d'une méthode d'action. Ceci est accompli en utilisant l'annotation [HtmlElementAttributes] sur le paramètre.

Je veux une annotation similaire qui me permette de mettre des classes css dans un paramètre string et d'avoir le même intellisense qui apparait avec les classes css.


Utilisez [ValueProvider]

A partir des annotations de code actuellement supportées par Resharper 10, le meilleur candidat utilisera cet attribut. Du lien ci-dessus:

ValueProviderAttribute

Pour un paramètre qui devrait être l'un des ensembles de valeurs limités. Spécifiez les champs de quel type doivent être utilisés comme valeurs pour ce paramètre.

Malheureusement, je n'ai pas compris comment cela fonctionne. Peut-être que c'est buggé dans ma version Resharper 9.2.

Ce que j'ai essayé jusqu'ici:

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;
        }
    }
}

Même si vous le faites fonctionner, vous devrez toujours remplir la liste des valeurs.

Et bien sûr, vous pouvez toujours développer votre annotation / extension de code pour Resharper.

Pourquoi ne pas utiliser un objet typé fort au lieu d'une chaîne?

Parfois, au lieu d'utiliser string et int , nous pourrions utiliser des classes typées plus fortes de notre propre conception. Comme il semble que vous contrôlez votre code, vous pouvez au lieu d'utiliser une string avec un nom de CSS, vous pouvez créer un nouveau type comme CssClass .

Vous avez juste besoin d'ajouter en tant qu'événement prédéfini un appel à un générateur qui analyse chaque css du projet et crée dynamiquement une classe comme celle-ci:

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;
    }
}

et alors votre échantillon ressemblera à ça:

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);
    }
}




html-helper