Bonjour,
je développe un mini framework de logging s'appuyant sur Log4Net afin de faciliter la tâche des développeurs qui doivent prendre la suite.
J'ai donc créé une classe Attribut qui doit être systématiquement utilisée sur des méthodes des classes de Service, j'ai alors créé une interface qui déclare ces méthodes et chaque nouvelle classe de service doit implémenter cette interface, seulement voilà le développeur doit lui même rajouter les attributs sur toutes les méthodes et si il oublie et bien tant pis la méthode n'est pas suivi.
Si je déclare les Attributs au niveau des interfaces, lorsqu'elles sont implémentées les méthodes ne sont pas précédées des Attributs et il n'est pas tenu en compte.
Ma question, est-il possible de forcé la signature et les Attributs d'une méthode déclarées dans une interfaces?
Voici le code que j'ai avec les Attributs déclarés à la main:
et le code que je voudrais avec les Attributs déclarés et implémentés automatiquement par l'interface:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 public interface IObjectService { int Insert(object obj); int Update(object obj); int Delete(object obj); } public class ObjectDomaine:IObjectService { #region IObjectService Membres [LoggingAttribute("toto", "Insert", "ObjectDomaine")] public int Insert(object obj) { return 0; // throw new Exception("The method or operation is not implemented."); } [LoggingAttribute("toto", "Update", "ObjectDomaine")] public int Update(object obj) { return 0; // throw new Exception("The method or operation is not implemented."); } [LoggingAttribute("toto", "Delete", "ObjectDomaine")] public int Delete(object obj) { return 0; // throw new Exception("The method or operation is not implemented."); } #endregion }
de plus comment peut-on dire dans la déclaration d'un Attribut que je souhaite renvoyer le nom de la classe en cours? Afin de remplacer ce bout de code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 public interface IObjectService { [LoggingAttribute("toto", "Insert", string)] int Insert(object obj); [LoggingAttribute("toto", "Update", string)] int Update(object obj); [LoggingAttribute("toto", "Delete", string)] int Delete(object obj); } public class ObjectDomaine:IObjectService { #region IObjectService Membres [LoggingAttribute("toto", "Insert", "ObjectDomaine")] public int Insert(object obj) { return 0; // throw new Exception("The method or operation is not implemented."); } [LoggingAttribute("toto", "Update", "ObjectDomaine")] public int Update(object obj) { return 0; // throw new Exception("The method or operation is not implemented."); } [LoggingAttribute("toto", "Delete", "ObjectDomaine")] public int Delete(object obj) { return 0; // throw new Exception("The method or operation is not implemented."); } #endregion }par par exemple (le code est faux mais c'est pour la démonstration):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 [LoggingAttribute("toto", "Insert", "ObjectDomaine")] public int Insert(object obj)
Merci d'avance
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 [LoggingAttribute("toto", "Insert", ObjectDomaine.GetType().FullName)] public int Insert(object obj)
Partager