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 :

Problème d'import MEF


Sujet :

C#

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 18
    Points : 4
    Points
    4
    Par défaut Problème d'import MEF
    Bonsoir, je suis sur un problème depuis plusieurs heure et je lâche un peu l'affaire >< Le code est logique, je vois clairement pas d'où ça peut venir :/

    J'ai 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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using Google.YouTube;
    using Google.GData.Extensions.MediaRss;
    using Google.GData.YouTube;
    using Google.GData.Extensions.Location;
    using Google.GData.Client;
    using System.Net.Mime;
    using System.ComponentModel.Composition;
     
    namespace Modules
    {
        public interface IMyModuleUpload
        {
            string Name { get; }
            string MadeBy { get; }
            double Version { get; }
            void upload(string title, string description, string[] keywords, string path);
        }
     
        [Export]
        public class MyYoutube : IMyModuleUpload
        {
            const string _type = "Youtube";
            const string _madeBy = "Xtroyer";
            const double _version = 1.0;
            private string[] _idents;
            private YouTubeRequest _request;
            YouTubeRequestSettings _settings;
     
            public string Name
            {
                get { return _type; }
            }
            public string MadeBy
            {
                get { return _madeBy; }
            }
     
            public double Version
            {
                get { return _version; }
            }
     
            [ImportingConstructor]
            public MyYoutube([Import("Pseudo")]string pseudo, [Import("Password")]string password)
            {
                this._idents = new string[2] { pseudo, password };
                _request = new YouTubeRequest(_settings);
            }
     
            public string[] Idents
            {
                get { return _idents; }
                set { _idents = value; }
            }
     
            public void upload(string title, string description, string[] keywords, string path)
            {
    /*Peu importe */
            }
        }
    }
    Et une classe d'import :
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.ComponentModel.Composition;
    using System.IO;
    using System.Reflection;
    using System.ComponentModel.Composition.Hosting;
     
    namespace ConsoleApplication3
    {
        public interface IMyModuleUpload
        {
            string Name { get; }
            string MadeBy { get; }
            double Version { get; }
            void upload(string title, string description, string[] keywords, string path);
        }
     
        class ImportModuleUpload
        {
            [ImportMany(typeof(IMyModuleUpload))]
            public IEnumerable<IMyModuleUpload> UploadService { get; set; }
     
            public void run(string pseudo, string mdp) { this.Compose(pseudo, mdp); }
     
            private void Compose(string pseudo, string mdp)
            {
                string currentDirectory = new FileInfo(Assembly.GetCallingAssembly().Location).Directory.ToString();
     
                AggregateCatalog catalog = new AggregateCatalog(new AssemblyCatalog(Assembly.GetExecutingAssembly()), new DirectoryCatalog(currentDirectory));
                var container = new CompositionContainer(catalog);
                container.ComposeExportedValue("Pseudo", pseudo);
                container.ComposeExportedValue("Password", mdp);
                container.ComposeParts(this);
                Console.WriteLine("Test : {0}", UploadService.Count());
            }
     
            public void upload(string name, string title, string description, string[] keywords, string path)
            {
            }
        }
     
        class Program
        {
            static void Main(string[] args)
            {
                ImportModuleUpload test = new ImportModuleUpload();
                Console.ReadKey();
            }
        }
    }
    Mais je ne retrouve rien alors que j'ai bien mi la DLL dans le même dossier que le binaire fin, j'ai rien du tout dans le UploadService, ça me rend fou >< Des idées ?

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Euh, ta question est pas super claire en fait
    Ca veut dire quoi "je ne retrouve rien" ? C'est peut-être clair pour toi, mais nous on n'a pas le contexte...

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 18
    Points : 4
    Points
    4
    Par défaut
    Problème résolu, en gros, je ne trouvais rien dans le dossier courant du type de l'interface, petit à petit j'ai réussi a avoir un resultat jusqu'à ce que le compilo me dise : "IModule can't be cast in IModule". Là je me suis dis "WTF".

    Au final il fallait utiliser une dll commune répertoriant l'interface pour la classe d'import et pour la classe exportée en héritant. Avant j'avais la classe IModule que je copiais collais dans les deux fichiers, mais même si la classe est identique à la ligne près, ca ne suffit pas, faut vraiment utilisé la même interface dans une dll. (Pas évident à expliquer x) ).

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

Discussions similaires

  1. problème pour importer données excel dans Access
    Par sarah67 dans le forum Access
    Réponses: 8
    Dernier message: 20/02/2006, 08h17
  2. problème d'importation
    Par weejungle dans le forum Requêtes
    Réponses: 8
    Dernier message: 19/12/2005, 15h22
  3. Réponses: 7
    Dernier message: 23/11/2005, 18h20
  4. Problème d'importation activeX
    Par arnaud2157 dans le forum MFC
    Réponses: 7
    Dernier message: 20/07/2005, 14h01
  5. Problème d'import avec l'interface sql server
    Par moutanakid dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 20/08/2004, 16h00

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