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

Framework .NET Discussion :

Dépendances de dll non voulues


Sujet :

Framework .NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Par défaut Dépendances de dll non voulues
    Bonjour,

    Le titre n'étant pas clair, je vais détailler mon problème ici :

    J'ai une fonction, GetFactory qui retourne une instance Factory suivant le type de source de données :
    Code C# : 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 DbProviderFactory GetFactory()
    {
        // Selon le moteur SQL utilisé
        switch (this.engineType)
        {
            //SQLite
            case SQLEngineType.SQLite: return System.Data.SQLite.SQLiteFactory.Instance;
     
            //MySQL
            case SQLEngineType.MySQL: return MySql.Data.MySqlClient.MySqlClientFactory.Instance;
     
            //Oracle
            case SQLEngineType.Oracle: return Oracle.DataAccess.Client.OracleClientFactory.Instance;
     
            //SQLServer
            case SQLEngineType.SQLServer: return System.Data.SqlClient.SqlClientFactory.Instance;
     
            //OleDB
            case SQLEngineType.Oledb: return System.Data.OleDb.OleDbFactory.Instance;
     
            //Odbc
            case SQLEngineType.Odbc: return System.Data.Odbc.OdbcFactory.Instance;
     
            // Un autre
            default: return null;
     
        }
    }

    Mon problème est que, dès que je veux une factory, par exemple celle de MySql, il faut obligatoirement que les dll des autres factory (Oracle.DataAccess, System.Data.SQLite, etc...) soit présente sous peine d'avoir une erreur
    "System.IO.FileNotFound : librairie non trouvée".
    Et quand on sait qu'on n'utilisera que MySql dans le projet, ça devient embêtant de devoir se traîner les autres dll.

    Quelqu'un connaitrait-il un moyen d'éviter ce désagrément ?

    Merci !
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  2. #2
    Membre chevronné Avatar de _PascalC_
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2008
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2008
    Messages : 220
    Par défaut
    Salut, comme ça à froid je tenterais bien quelque chose de ce style :

    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 DbProviderFactory GetFactory()
    {
        // Selon le moteur SQL utilisé
        switch (this.engineType)
        {
            //SQLite
            case SQLEngineType.SQLite: return GetInstanceSQLite();
     
            //MySQL
            case SQLEngineType.MySQL: return GetInstanceMySQL();
     
    	//...
            default: return null;
     
        }
    }
     
    private DbProviderFactory GetInstanceSQLite()
    {
    	return System.Data.SQLite.SQLiteFactory.Instance;
    }
     
    private DbProviderFactory GetInstanceMySQL()
    {
    	return MySql.Data.MySqlClient.MySqlClientFactory.Instance;
    }
     
    //...

  3. #3
    Membre Expert
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Par défaut
    Et faire une méthode privée pour chaque factory ?

    Je tente ça de suite !

    Merci
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  4. #4
    Membre Expert
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Par défaut
    Et bien ça marche, merci beaucoup !

    Pour chaque source de données, j'ai créé une méthode de ce genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    private DbProviderFactory GetSQLiteFactory()
    {
        return System.Data.SQLite.SQLiteFactory.Instance;
    }
    Il faut bien retourner le DbProviderFactory car sinon ça ne marchera pas, le compilateur essaiera de résoudre les types présents et on se retrouve à nouveau avec l'erreur citée plus haut.

    Je ne pensais pas que c'était aussi simple, je vais arrêter de penser compliqué
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  5. #5
    Membre chevronné Avatar de _PascalC_
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2008
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2008
    Messages : 220
    Par défaut
    vi car je pense que ton problème vient du faite que tu passe par une méthode qui "utilise/voit" toutes tes références.

  6. #6
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Il existe déjà une méthode de récupération de factory, a priori pas besoin de faire la tienne : DbProviderFactories.GetFactory.
    http://msdn.microsoft.com/fr-fr/library/h508h681.aspx

  7. #7
    Membre Expert
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Par défaut
    Je le sais bien, et c'est la méthode pour laquelle j'avais opté au début.

    Mais elle est trop liée au machine.config, hors je ne pouvais pas me permettre de devoir le modifier pour utiliser n'importe quel provider.

    D'où le choix de passer par des instances direct des providers voulus.
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 31/01/2012, 15h01
  2. Réponses: 3
    Dernier message: 17/03/2007, 13h26
  3. Pb Firefox + pb fermeture Windows non voulue
    Par trotters213 dans le forum Firefox
    Réponses: 9
    Dernier message: 13/06/2005, 16h16
  4. [CSS][IE >= 5.5] Transparence non voulue !
    Par pimousse76 dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 12/05/2005, 16h06
  5. probleme d'espace non voulu entre 2 bloc
    Par piff62 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 12/04/2005, 16h07

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