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

Développement Windows Discussion :

WPF et MEF : Petits problèmes


Sujet :

Développement Windows

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 9
    Points : 9
    Points
    9
    Par défaut WPF et MEF : Petits problèmes
    Bonjour,

    je viens de débuter un nouveau projet WPF.

    J'ai choisi d'utiliser MEF et MVVM light pour ce projet.

    Je suis en train de créer l'architecture du projet et j'ai quelques problèmes techniques.


    = = = > Présentation de l'architecture :

    Mon projet est pour l'instant découpé en plusieurs répertoire
    Common/UI/ (contient mes ressources graphiques)
    Common/library (contient mes librairies
    Contract/Inteface
    Contract/MetaData
    Data/
    Model/
    Test/
    View/
    ViewModel/ViewModel
    ViewModel/ViewModel.Interface

    et le projet Client

    Cette décomposition n'est pas fixé pour l'instant j'essaye de mettre les différents composants de base afin de voir ce que je conserve ou non.

    Sur les conseils d'un ami, j'ai utilisé un Locator maison pour les liaisons
    View <=> ViewModel

    Pour la navigation, j'utilise le Messenger.Default de MVVM Light.


    J'essaye maintenant d'ajouter Log4net.
    je voulais le faire avec MEF.

    J'ai créé dans le sous projet Common :

    LogService.cs

    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
    /// <summary> 
        /// Logging service that manages tracing and logging activities for the 
        /// web site application. 
        /// </summary> 
        [Export(typeof(ILogService))] 
        //[Trace] 
        public class LogService : ILogService
        {
            private static readonly ILog Log = LogManager.GetLogger(typeof(LogService));
            private readonly ILog log4Net; 
     
            //[ImportingConstructor]     
            public LogService()     
            {
     
                ILog log = LogManager.GetLogger(typeof(LogService));
                log4net.Config.XmlConfigurator.Configure();
                log.Info("test");
            }
     
     
            public void test()
            {
                ILog log = LogManager.GetLogger(typeof(LogService));
                log.Info("test");
            }
     
            [Import("Log4NetConfiguration", AllowRecomposition = true)]     
            public string Log4NetConfiguration { get; set; } 
     
                public void OnImportsSatisfied()     
                {         
                    Log.DebugFormat(CultureInfo.InvariantCulture,
                                    "Log4NetConfiguration = {0}",
                                    this.Log4NetConfiguration);
                    if (string.IsNullOrEmpty(this.Log4NetConfiguration))
                    {
     
                        //log4net.Config.XmlConfigurator
                        //this.log4Net
                        log4net.Config.XmlConfigurator.Configure();
                    }
                    else
                    {
                        //log4net.Config.XmlConfigurator.Configure(this.Log4NetConfiguration);  
                        //this.log4Net.Configure(this.Log4NetConfiguration);         
                    }
                } 
        }
    et l'interface IlogService.cs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     public interface ILogService
        {
            void test();
        }
    Le souci vient que lorsque dans mon MainViewModel.cs : (dans le sous projet ViewModel
    j'ajoute :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [Import(typeof(ILogService))]
            public ILogService LogService { get; set; }
    il me mets que mon locator n'existe pas.

    Première question :

    Je me suis demandé si en utilisant MEF.
    Il n'était pas nécessaire de travailler dans le même namespace.

    C'est à dire mon Locator (En Export) pour mes ViewModel (qui importe) doivent être dans le même sous projet pour que cela fonctionne ?

    Deuxième Question :
    Vu que mon logger et mon MainViewModel ne sont pas dans le même
    sous projet, alors il n'est pas possible de faire l'import export d'où l'erreur.

    Troisième question :

    Avez vous des propositions pour la réalisation de ma librairie pour mon Log4net ?

    Merci d'avance.

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 9
    Points : 9
    Points
    9
    Par défaut
    Quelques précisions.

    Apparement mon problème serait lié à mon lazy loading sur mon locator :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
            [ImportMany(AllowRecomposition=true)]
            public Lazy<ViewModelBase, IViewModelExport>[] ViewModels { get; set;}
     
            #region "constructor"
     
            public LocatorVM()
            {
                _catalog = new AssemblyCatalog(Assembly.GetExecutingAssembly());
                _container = new CompositionContainer(_catalog);
                _container.ComposeParts(this);
            }
    Donc dès que j'essaye de faire un nouvel import dans mon MainViewModel

    La propriété ViewModels ne se mets plus correctement à jour.
    Car les différents ViewModels ne sont plus chargés dedans.

    En Gros dès que j'essaye dans mon mainViewModel, d'utiliser mon ILogger qui est lui aussi en Import / Export. Le LazyLoading de mon ViewModels ne se fait plus correctement.

    Quelqu'un aurait il une idée ?

Discussions similaires

  1. [WPF] Petits problèmes de style
    Par despeludo dans le forum Windows Presentation Foundation
    Réponses: 9
    Dernier message: 06/10/2007, 00h22
  2. Petit problème de décimales !
    Par ridan dans le forum Langage SQL
    Réponses: 5
    Dernier message: 11/09/2004, 21h24
  3. Réponses: 17
    Dernier message: 13/07/2004, 20h37
  4. petit problème premier plan, arrière plan
    Par gros bob dans le forum OpenGL
    Réponses: 4
    Dernier message: 19/04/2004, 12h00
  5. [jointure] Petit problème sur le type de jointure...
    Par SteelBox dans le forum Langage SQL
    Réponses: 13
    Dernier message: 13/02/2004, 18h55

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