Bonjour à tous,

je suis confronté à un problème qui m'est impossible à résoudre

J'ai une classe générique et d'autres classe qui héritent de cette classe générique.

Je ne connais pas par avance quel va être le type de la classe qui va être instanciée.

J'utilise donc la réflexion pour instancier mes classes.

Jusqu'ici tout va bien.

Par contre ensuite je suis en train de me casser les dents sur l'appel d'une méthode générique qui possède comme type de retour un objet du type de la classe instanciée.

Voici le code de cette méthode

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
public static T Load<T>(string nomFichier) where T : new()
        {
            // Chargement des coefficients pour le calcul des BP
            ObjectXMLSerializer objectXMLSerializer = new ObjectXMLSerializer();
 
            T item = new T();
 
            item = (T)objectXMLSerializer.Load(item, nomFichier, SerializedFormatType.Document);
 
            return item;
        }
Cette fonction fonctionne trés bien sans utiliser la réflexion

Voici maintenant le code de mon appel avec la réflexion

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
private object chargerMethodeLoad( string assembly, string parametre)
        {
            object[] parameters = new object[1];
            object a1 = null;
 
            Assembly monAssembly = Assembly.Load(assembly);
            ResourceManager resource = new ResourceManager("Migration_Bradley.Fichiers.correspondance", GetType().Assembly);
 
            try
            {
                foreach (Type type in monAssembly.GetTypes())
                {
                    if (type.Name == resource.GetString(assembly))
                    {
                        a1 = Activator.CreateInstance(type);
                        MethodInfo method =typeof(XmlGenerique<automate>).GetMethod("Load");
                        MethodInfo genericMethod = method.MakeGenericMethod(type);
                        parameters[0] = parametre;
                        genericMethod.Invoke(a1, parameters);
                    }
                }   
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }
 
            return a1;
        }
Les types ayant la possibilité sont les types FEFExchangeFile et RsLogix5000Content le type automate et le type dont ces classe hérites et la classe automate hérite elle même de la classe XmlGenerique qui définit la méthode Load

Mon programme s'éxécute sans erreur, le seul soucis et que mon objet ne possède pas les valeurs qui dévraient lui être associée (a1).

J'ai utilisé le debuger la fonction récupère les valeurs mais au moment ou a1 devrait récupérer les valeurs ils ne les récupère pas

Est ce que vous pouvez me dire d'où vient l'erreur et si ce que je souhaite faire est possible ou bien s'il existe une méthode de contournement

Merci d'avance pour vos réponses