Bonjour à tous
Alors voila,
Suite à une implémentation de plugin et compagnie (voir mes autres posts ^^)
Je me retrouve à devoir sérialiser des objets contenus dans une DLL.
Jusque là, pas de soucis ...
Par contre, lors de la déserialisation,
J'ai une exception comme quoi le type de l'objet n'existe pas ...
Je pose le contexte ^^
J'ai des modules avec des configurations.
J'ai besoin de sauvegarder le type de chaque module mais pas son instance.
Et j'ai par contre besoin de sauvegarder sa configuration actuelle
(donc une instance)
Les deux objets sont décris dans une DLL
Et l'objet de configuration n'est connu que par le module
(mon programme ne connait que l'interface qu'il implémente)
Donc quand je recrée l'objet lors de la déserialisation,
Je souhaite lui redonner sa configuration.
Mais je peux pas vu que le type réel n'est connu que par la DLL ...
J'ai contourné le problème de la façon la plus moche qui soit,
C'est à dire que mon interface est devenue une classe abstraite
Contenant un dictionnaire d'attributs
Et c'est la seule chose que je sauvegarde
(Oui c'est très très moche ^^')
voilà ce que ça donne :
Dans le programme
Dans une DLL
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 public abstract class Configuration { public IDictionary<string, object> Attributes { get; set; } #region constructors public Configuration() { Attributes = new Dictionary<string, object>(); } #endregion #region accessors public T getAttr<T>(string name) { return (T)Attributes[name]; } public void setAttr<T>(string name, T value) { Attributes[name] = value; } #endregion public abstract void show(); }
Quelqu'un voit le soucis et comment y remédier ?
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 class MyConfig : Configuration { public MyConfig() { setAttr<string>("myattr", "coucou"); } #region Configuration public override void show() { // ... } #endregion public void plop() { Console.ReadLine(getAttr<string>("myattr")); } }![]()
Partager