Bonjour à tous,
j'ai vu dans la MSDN qu'une variable statique est initialisée lorsque le CLR charge la classe/namespace qui contient la variable.
Comment est-ce que je peux faire comme en C++ où les variables statiques sont chargées lorsque l'application se lance?
Je voudrais faire une factory où les objets qui peuvent être créés se chargent eux-même dans la factory, sans qu'on ait besoin d'ajouter manuellement les objets dans le code de la factory.
Voici le code que j'ai actuellement:
La factory:
Un objet qui peut-être créé par la factory
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 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Test_Factory { delegate ObjectFactory CreateObject(); class Factory { private SortedDictionary<string, CreateObject> MapObjects = new SortedDictionary<string, CreateObject>(); public List<string> ListObjects { get { return MapObjects.Keys.ToList(); } } public bool Register(string ID, CreateObject createObjectDelegate) { try { MapObjects.Add(ID, createObjectDelegate); } catch (ArgumentException exp) { return false; } return true; } }
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 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Test_Factory { class Object1 : ObjectFactory { private static string Identifier { get { return "Object1"; } } public static bool Created = Factory.Instance.Register("Object1", delegate() { return new Object1(); }); public Object1() { } } }
Pour enregistrer l'objet dans la factory, je suis pour l'instant obligé de le faire manuellement dans le main de l'application:
Des idées?
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 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Test_Factory { class Program { static void Main(string[] args) { bool f = Object1.Created; var query = from a in Factory.Instance.ListObjects select a; foreach (var a in query) Console.WriteLine(a); Console.Read(); } } }
Merci d'avance
PS: j'ai pour l'instant une solution qui fonctionne à base de réflection, mais je suis assez circonspect vis à vis des performances ou de l'efficacité de cette solution.
Partager