IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

[c#] assembly CreateInstance


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Par défaut [c#] assembly CreateInstance
    Bonsoir,

    j'ai un petit problème avec la méthode CreateInstance.
    Celle-ci retourne null.

    Voici mon code :

    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
     
            private void LoadAssemblies()
            {
                DirectoryInfo Dir = new DirectoryInfo(Initialisation.Dll);
                foreach (FileInfo File in Dir.GetFiles("*.Command.dll"))
                {
                    Assembly Assemb = Assembly.LoadFrom(File.FullName);
                    foreach (Type Typ in Assemb.GetTypes())
                    {
                        if (Typ.IsInterface == false)
                        {
                            this._map[Typ.Name] = Assemb;
                        }
                    }
                }
            }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    if (this._map.ContainsKey(Commande))
                        {
                            try
                            {
                                Command Cmd = (Command)this._map[Commande].CreateInstance(Commande, true);
     
                            }
                            catch (Exception)
                            {
     
                            }
                        }
    Cmd vaut toujours null.

    Avez-vous une idee d'ou cela peut venir ?

    Merci d'avance.
    Cordialement,
    NeoKript

  2. #2
    Membre très actif Avatar de Sacha999
    Inscrit en
    Mars 2007
    Messages
    294
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Mars 2007
    Messages : 294
    Par défaut
    La doc http://msdn.microsoft.com/en-us/libr...8VS.71%29.aspx indique:
    typeName
    The Type.FullName of the type to locate.
    ignoreCase
    true to ignore the case of the type name; otherwise, false.
    Essaie donc plutôt ça pour voir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    this._map[Typ.FullName] = Assemb;

  3. #3
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Par défaut
    Le soucis n vient en fait pas d'où je pensais c'est pas create instance qui bug mais le cast de mon interface :


    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
     
    if (this._map.ContainsKey(Commande))
                        {
                            try
                            {
                                object ob = this._map[Commande].CreateInstance("ClientUser." + Commande, true);
                                if (ob is Command)
                                {
                                    Command Cmd = ob as Command;
                                    Byte[] result = Cmd.Execute(Destinataire, Commande, Content);
                                    Static.Push(result);
                                }
                            }
                            catch (Exception E)
                            {
                                String test = E.Message;
                            }
                        }
    On ne passe pas dedans if (ob is Command) ... alors que ob implémente bien l'interface Command...

    Avez vous une une idée ?

    Merci

  4. #4
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    remplacer
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if((ob as Command) != null)
    ?

  5. #5
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Par défaut
    Salut pas mieux, on ne passe pas dans le if.

    Voici mon interface si ca peut aider :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        interface Command
        {
            void    SetPath(String Path);
            Byte[]  Execute(String Destinataire, String Command, Byte[] Ele);
        }
    Merci

  6. #6
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Dit, on pourrai voir le code complet d'une des classes censée être chargée ? (enfin, code complet = namespace toussa, ce qu'elle fait en concret n'a pas d'importance).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Besoin d'aide avec Regexp::Assemble
    Par mobscene dans le forum Modules
    Réponses: 5
    Dernier message: 11/04/2007, 12h39
  2. Réponses: 19
    Dernier message: 31/10/2005, 15h04
  3. [D2005]Comment utiliser des assembly développées en delphi
    Par Valéry dans le forum Delphi .NET
    Réponses: 1
    Dernier message: 16/08/2005, 18h36
  4. Utiliser des Assembly .Net dans Visual C++ 6.0
    Par nitram dans le forum MFC
    Réponses: 1
    Dernier message: 15/06/2005, 09h05
  5. [D8] Assembly et dépendance
    Par guiguit dans le forum Delphi .NET
    Réponses: 2
    Dernier message: 22/06/2004, 16h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo