En C# En Utilisant Des Annotations?
J'ai créé cette Annotation classe
Cet exemple n'aurait pas de sens parce qu'Il va toujours jeter une exception, mais je suis encore à l'utiliser comme je suis juste essayer d'expliquer ce que ma question est.
Mon annotation n'est jamais appelé pour certaines raisons, toutes les solutions?
public class AuthenticationRequired : System.Attribute
{
public AuthenticationRequired()
{
//My break point never gets hit why?
throw new Exception("Throw this to see if annotation works or not");
}
}
[AuthenticationRequired]
private void Window_Loaded(object sender, RoutedEventArgs e)
{
//My break point get here
}
Vous avez ici comment accéder et lire vos annotations personnalisées: msdn.microsoft.com/en-us/library/z919e8tw.aspx#Y109
OriginalL'auteur aryaxt | 2011-07-25
Vous devez vous connecter pour publier un commentaire.
C'est une sorte de malentendu d'attributs. Attributs existent pour ajouter des métadonnées à certaines parties de votre code (classes, propriétés, champs, méthodes, paramètres, etc.) Le compilateur prend l'information dans l'attribut et le cuit au four dans la IL qu'il crache quand c'est fait manger votre code source.
Attributs par eux-mêmes, ne font rien de moins que quelqu'un ne les consomme. C'est quelqu'un à un certain point a à découvrir votre attribut, puis de prendre une action sur elle. Ils sont assis dans l'IL de votre assemblée, mais ils ne font rien moins que quelqu'un les trouve et agit sur eux. C'est seulement quand ils le font ce sera une instance de l'attribut être instancié. Typique de la façon de le faire est l'utilisation de la réflexion.
Pour obtenir les attributs lors de l'exécution, vous avez à dire quelque chose comme
Merci pour la réponse, Est-il possible de faire en sorte que lorsqu'une méthode est un attribut spécifique d'un bloc de code est appelé? Serait-ce considéré comme une mauvaise pratique? Disons que je veux que chaque méthode avec "Journal" de l'attribut du journal le temps. Je suis en train d'utiliser cette méthode pour la réutilisation de code
Oui, il est possible de le faire. Mais vous avez besoin de quelque chose pour construire que pour vous (vous pouvez le faire vous-même, mais il existe des outils disponibles qui va le faire pour vous). Ce que vous recherchez est quelque chose qui va générer dynamiquement un proxy pour vous. Ces préoccupations sont souvent appelés les sujets transversaux, et ce type de programmation est appelé la programmation orientée aspects. Si vous regardez les capacités d'interception dans le Château de Windsor, par exemple, vous verrez comment il peut être fait: castleproject.org/container/documentation/trunk/usersguide/...
Le lien est rompu. Avez-vous une solution?
OriginalL'auteur jason