2015-04-30 1 views
2

Je suis en train d'ajouter l'enregistrement à mon application C# à l'aide de laComment utiliser le même nom pour initialiser un grand nombre TraceSource dans plusieurs classes

System.Diagnostics.TraceSource 

Au sommet de nombreuses classes maintenant (UI, traitement, données ...) J'ai ceci:

private static TraceSource logger = new TraceSource("SourceName"); 

Je veux que chaque classe à l'exploitation forestière à un nom de source commune, mais sans coder en dur, comme il est actuellement.

Le nom de la source serait fourni par l'application de niveau supérieur, ce nom correspondant à celui du fichier de configuration. Quelle est la meilleure façon d'y parvenir, à l'exception de l'ajout d'un nouveau paramètre string sourceName dans chaque classe dont la consignation est activée et de la passer de la classe hôte du programme à la classe de couche de données la plus basse?

Répondre

1

Créez un singleton Static qui aura une chaîne de propriété vide appelée name. Cette propriété sera initialisée par le processus d'origine qui la lira à partir des paramètres, puis le placera dans la propriété de nom du singleton. Ensuite, quand toutes les classes ouvrières auront besoin du nom, elles l'obtiendront à partir de la propriété statique du singleton qui a été configurée pendant l'initialisation.

+0

Sons à propos! Dans quel assemblage dois-je mettre ce singleton puisque mes classes de journalisation sont dispersées parmi beaucoup d'entre eux? – ibiza

+0

@Ibiza Dépend de l'architecture, mais s'il y a un assemblage partageable qui peut être partagé en toute sécurité, mettez-le (ou créez-en un). – OmegaMan

+0

Je ne pense à un montage que pour ça ... c'est trop? – ibiza