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
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();
}
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
 
class MyConfig : Configuration
{
  public MyConfig()
  {
    setAttr<string>("myattr", "coucou");
  }
 
  #region Configuration
  public override void show()
  {
    // ...
  }
  #endregion
 
  public void plop()
  {
    Console.ReadLine(getAttr<string>("myattr"));
  }
}
Quelqu'un voit le soucis et comment y remédier ?