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 :

Composite UI Application Block : QQn l'utilise ?


Sujet :

C#

  1. #1
    Membre émérite
    Avatar de shwin
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    568
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2003
    Messages : 568
    Par défaut Composite UI Application Block : QQn l'utilise ?
    J'aurais besoin de savoir si qqn utilise le CAB avec les WorkItemExtension et des controllers

    J'ai googlé mon problème mais personne semble s'être rendu où je suis.

    Si qqn l'utilise laissé moi savoir. Il y as pas beaucoup d'aide sur ce sujet!!

    Merci

  2. #2
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    petit veinard va

    Je travaille sur un projet ou l'ancien developpeur à utiliser les CAB de microsoft.

    J'ai mis un peu de temps (1 h) pour comprendre comment cela fonctionnait et j'ai envie de dire la chose suivante :

    QUEL BEAU MERDIER CE TRUC

    Concrètement... nous l'utilisons dans le cadre suivant : Une IHM pour une application et des module (controler, view, etc) peuvent venir s'y intégrer.

    L'interet est clair, si tu développes un module qui possède tout ce qu'il faut, il s'intègre en ajoutant juste son nom dans un fichier XML décrivant les modules à charger

    Par contre, au niveau de la gestion des evenements, c'est pratique d'un coté, mais MEGA chiant de l'autre. Il faut déclarer les Evenements inter module ou inter-element de module dans une liste de string. ET ensuite, pour lever un evenement, tu passes par l'interface de base du CAB. pour s'abonner à un evenement, il faut utiliser une décoration de la méthode pour que celle ci soit "connecté" à l'evenement

    Bref, tu auras compris que cela peut etre interessant dans le cadre ou tu pourrais t'abonner à un event qu'un autre module pourrait ou pas suivant sa présence exposer, mais bon, le mécanisme est assez lourd je trouve.

    Quand tu regardes le code généré, tu as environ 10 DLL rien que pour le CAB (je trouve cela volumineux).

    Ensuite, le CAB est utile pour nous parce qu'on espérait développer "moultes" applications identiques en terme d'IHM.

    Au final, j'aurais tendance à dire qu'avant que le CAB se justifie pleinement en terme de gain de temps, il faut vraiment des conditions que je ne rencontre pas dans mon projet.

    Personnellement, je trouve que la gestion par plug-in (qui est voisine finalement du concept CAB) est plus simple, plus pratique et surtout beaucoup plus rapide à mettre en oeuvre sans avoir à installer le CAB (car il te faut l'installer si tu veux pouvoir profiter des extensions qu'il amène à Visual Studio (bouton droit Add Cab UI, etc...).

    Bref, je reste très partagé quand à l'interet des CAB UI de microsoft.

    En tout cas, il est clair que dans l'application que j'ai, j'aurais été bien plus vite en m'en passant (maintenant, je n'en suis que le chef de projet qui recupère le boulot effectué par quelqu'un qui a quitté la société

    Si tu as des questions supplémentaires, n'hésites pas. J'essayerais d'y repondre en fonction de mon temps et disponibilité

    PS : Etant en vacances à compter de demain et sans liaison internet durant une semaine, n'attends pas une réactivité de ma part avant dimanche en 8

  3. #3
    Membre émérite
    Avatar de shwin
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    568
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2003
    Messages : 568
    Par défaut
    Salut theMonz31, le CAB est merveilleux après que tu sache comment bien l'utiliser. C'est tellement facile de se perdre et de tout abandonné.


    Pour ce qui est de l'eventBroker, si tu enrégistre ton event au niveau du parent, tu peux facilement te subscribe dessus dans l'enfant. (La structure des workitems est tres importante). C'est tellement merveilleux de seulement a avoir a mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    [EventSubscription(Dispatch.Resources.EventTopics.FlightUpdated)]
    		public void OnFlightUpdated(object sender, Dispatch.Common.EventArgs.EntitySavedEventArgs<AirCreebec.Services.Dispatch.Model.Flight> e)
    		{
    			Services.Dispatch.Model.Flight existingFlight = Flights.Find(item => item.FlightNumber == e.Data.FlightNumber);
    			if (existingFlight == null)
    				return;
     
    			e.Data.CopyTo(existingFlight);
    		}
    seulement pour se faire avertir!!

    Voila, j'ai une erreur que je ne comprend trop.

    Dans un module (Dispatch) jai un workitem qui fait ce qu'il as a faire. Dans un autre module, j'extensionne le Dispatch comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    	[WorkItemExtension(typeof(Dispatch.MainWorkItem))]
    	public class WorkItemExtension : Shell.Common.WorkItemExtensionBase<Dispatch.MainWorkItem>
    	{
    		protected override void OnInitialized()
    		{
    			base.OnInitialized();
     
    			ExtendExplorerBar();
    			ExtendMenuItem();
     
    		}
    ...
    Ce workitemExtension affiche un smartpart
    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
     
    public void FlightsItemClick(object sender, EventArgs e)
    		{
     
    		 WorkItem.ShowSmartPart(FlightsList);
    		}
     
    private Views.FlightsList _flightsList ;
    		public Views.FlightsList FlightsList
    		{
    			get 
    			{
    				if (_flightsList == null)
    					_flightsList = WorkItem.SmartPart.AddNew<Views.FlightsList>(); 
    				return _flightsList; 
    			}
    		}
    Le propriété WorkItem est "shadowé" dans ma base comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public class WorkItemExtensionBase<TWorkItem> : Microsoft.Practices.CompositeUI.WorkItemExtension where TWorkItem : WorkItemBase
    	{
    		protected new TWorkItem WorkItem
    		{
    			get { return (TWorkItem)base.WorkItem; }
    		}
    	}
    Mais voila que je ne peux pas faire de [ServiceDependency] dans mes SmartPart pour me faire injecté mon WorkitemExtension
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    [ServiceDependency]
    public Dispath.Schedules.WorkItemExtension WorkItemExtension
    {
     get { ;}
     set { ;}
    }
    Ce bout de code "abrégé" me faire faire cette exception
    Service Dispatch.Schedules.WorkItemExtension is not available in the current context.
    Bref, tout ca pour dire que je ne peux pas injection mes WorkItemExtension dans mes smartparts. Je ne comprend pas trop la raison. Ca fais une couple de jours que je suis "pogné" avec ce problème qui m'empêche d'avancé car tout est en "plug-in" et c'est LA FACON de faire du module extension avec le CAB

  4. #4
    Membre émérite
    Avatar de shwin
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    568
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2003
    Messages : 568
    Par défaut
    J'ai enfin résolu mon problème. On ne peux définitivement pas injecté un WorkItemExtension.

    Voila comment faire
    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
     
    [WorkItemExtension(typeof(Dispatch.MainWorkItem))]
    	public class WorkItemExtension : Shell.Common.WorkItemExtensionBase<Dispatch.MainWorkItem>
    	{
     
     
     
     
    		protected override void OnInitialized()
    		{
    			base.OnInitialized();
     
    			MainWorkItem = WorkItem.WorkItems.AddNew<MainWorkItem>();
     
    		}
     
    		private MainWorkItem mainWorkItem;
    		private MainWorkItem MainWorkItem
    		{
    			get { return mainWorkItem; }
    			set { mainWorkItem = value; }
    		}
     
    		protected override void OnRunStarted()
    		{
    			MainWorkItem.Run(WorkItem.Workspace);
    			base.OnRunStarted();
    		}
     
    	}
    Il faut se créé un WorkItem qui va géré le module au lieu d'utiliser l'extension pour la gérance. L'extension sert seulement de hooking.

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

Discussions similaires

  1. Utilisation de UIA (User Interface Application Block)
    Par the big ben 5 dans le forum Delphi .NET
    Réponses: 2
    Dernier message: 16/11/2006, 09h09
  2. [C#][2.0]Commande UpdateDataSet du Data Application Block
    Par seb.49 dans le forum Accès aux données
    Réponses: 2
    Dernier message: 06/11/2006, 15h09
  3. Réponses: 3
    Dernier message: 18/09/2006, 16h42
  4. Réponses: 3
    Dernier message: 09/01/2006, 16h35
  5. Icones des applications en cours d'utilisation.
    Par mickaelguilbert dans le forum MFC
    Réponses: 4
    Dernier message: 31/08/2005, 10h15

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