Bonjour,
Voulant transposer un programme en VB.NET vers C# histoire de me faire la main avec C#, je me retrouve un peu bloquer sans doute par une chose a laquelle je n'ai pas penser.
J'ai donc une Interface :
Et une classe qui implemente l'interface :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 using System; using System.Collections.Generic; using System.Text; public interface DataBaseInterface { string GetName(); }
Il faut savoir que la classe Mysql qui implemente DataBaseInterface est dans une bibliotheque de classe qui lui est propre.
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 using System; using System.Collections.Generic; using System.Text; using MySql.Data.MySqlClient; public class Mysql : DataBaseInterface { public Mysql() { } public string GetName() { return "Mysql Database"; } }
Et donc dans mon autre programme, je verifi les DLL placé dans le repertoire d'interface de base de donnée via cette fonction :
Et au moment ou je charge ma DLL, ElementType.GetInterface("DataBaseInterface") retourne bien une valeur, seulement au moment du Dll.CreateInstance cela leve une exception invalid cast...
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 private static bool IsFileDataBasePlugIn(string Filename) { System.Reflection.Assembly Dll; try { Dll = System.Reflection.Assembly.LoadFrom(Filename); foreach (Type ElementType in Dll.GetTypes()) { if (ElementType.IsClass) { if (ElementType.GetInterface("DataBaseInterface") != null) { DataBaseInterface oDataBase = (DataBaseInterface)Dll.CreateInstance(ElementType.ToString()); return true; } } } return false; } catch (Exception ex) { Debugger.RaiseError("Database.cs", "IsFileDataBasePlugIn()", ex); return false; } }
Le message de l'exception est :
Impossible d'effectuer un cast d'un objet de type 'Mysql' en type 'DataBaseInterface'.
Si quelqu'un a une idée ?
Partager