2010-08-31 4 views
1

Dans le projet A, j'ai une classe statique qui stocke les données pour les types spécifiques, ces données est initialisé dans le constructeur statiqueComment au niveau mondial ajouter des données à une classe statique dans un autre dll

public static class MyStaticClass 
{ 
    private static readonly Dictionary<Type, object> data = new Dictionary<Type, object>(); 

    static MyStaticClass() { /*fill data here*/ } 

    public static object GetData(Type type) { return data[type]; } 

    public static void SetData(Type type, object o) { data[type] = o; } 
} 

Projet B utilise projet R. Le projet B est aussi une bibliothèque. Dans le projet B, je souhaite utiliser cette classe non seulement pour les types ajoutés dans le constructeur statique, mais aussi pour les types définis dans B et ses dépendances.

Fondamentalement, quelque part dans B je veux avoir le code suivant:

MyStaticClass.SetData(typeof(TypeInB), new object()); 
MyStaticClass.SetData(typeof(TypeInDllUsedByB), new object()); 

Quelle serait l'endroit approprié pour mettre ce code dans le projet B? Je projette B il y a plusieurs endroits que je voudrais appeler GetData sans avoir à m'inquiéter si le code précédent a déjà été exécuté.

J'ai pensé à le placer dans static TypeInB() et toutes les autres classes que je voudrais utiliser, mais cela ne fonctionnera pas pour les classes définies dans d'autres assemblées.

Répondre

2

Créer classe wrapper dans le projet B qui Fwd appels au référentiel dans le projet A. Par exemple,

public static class MyStaticClassInB 
{ 

    static MyStaticClassInB() { /*fill data here*/ } 

    public static object GetData(Type type) { return MyStaticClass.GetData(type); } 

    public static void SetData(Type type, object o) { MyStaticClass.SetData(type, o); } 
} 

Toujours utiliser MyStaticClassInB dans le projet B (et non MyStaticClass). Maintenant l'emplacement correct pour initialiser les types de B serait le constructeur statique de cette classe.

+1

alors prenez simplement la classe du projet A et mettez-la dans le projet b? – Spooks

+0

@Spooks, pas vraiment - Je conseille de créer un wrapper qui transmettra l'appel à la classe du projet A. Il peut y avoir plusieurs méthodes dans cette classe et ils ont une implémentation non triviale et je suggère de réutiliser plutôt que copiez-le. – VinayC

Questions connexes