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 :

[CAB] Création d'un ContextBoundController


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 [CAB] Création d'un ContextBoundController
    Je suis en plein développement d'un CAB project et j'ai besoin que mes controllers hérite de ContextBoundObject pour me créé un proxie qui va valider mes PrincipalPermissionAttribute de mes méthodes et demander les permission via le CREDUI et impersonalisé l'action.

    Mais voila que le CAB n'aime pas trop trop la class ContextBound, jai cette exception
    Cannot create uninitialized instances of types requiring managed activation.
    Voila comment mes class fonctionne

    J'ai mon 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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    	[SmartPart]
    	public partial class SubSystemsList : UserControl
    	{
    		public SubSystemsList()
    		{
    			InitializeComponent();
    		}
     
    		private SubSystemsController _controller;
    		[CreateNew]
    		public SubSystemsController Controller
    		{
    			private get { return _controller; }
    			set { _controller = value; }
    		}
     
    		private void ShowSubSystems()
    		{
    			List<Common.ISubSystem> subSystems = Controller.GetSubSystems();
    			foreach (Common.ISubSystem item in subSystems)
    			{
    				SubSytemsPanel.Controls.Add(new SubSystem(item));
    			}
    		}
    		private void SubSystemsList_Load(object sender, EventArgs e)
    		{
    			if (DesignMode) return;
    			ShowSubSystems();
    		}
    	}
    Le controller est créé par injection [CreateNew]

    J'ai mon Controller
    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
     
    public class SubSystemsController : Common.ContextBoundController
    	{
    		public SubSystemsController()
    		{
    		}
    		private Shell.Common.Services.ISubSystemsService _subSystemsService;
    		[ServiceDependency]
    		public Shell.Common.Services.ISubSystemsService SubSystemsService
    		{
    			get { return _subSystemsService; }
    			set { _subSystemsService = value; }
    		}
     
    		private SubSystemsWorkItem _workItem;
    		[ServiceDependency]
    		public SubSystemsWorkItem WorkItem
    		{
    			get { return _workItem; }
    			set { _workItem = value; }
    		}
     
    		public List<ISubSystem> GetSubSystems()
    		{
    			return SubSystemsService.GetSubSystems();
    		}
     
    		public void RunSubSystem(ISubSystem subSystem)
    		{
    			WorkItem.LeaveLobby();
     
    			// Show subsystem in workspace...
    			subSystem.Show(WorkItem.Workspaces[Common.Workspaces.Window]);
    		}
    	}
    Mon ContextBoundController
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    [InterceptCall]
    	public class ContextBoundController: ContextBoundObject
    	{
    		public ContextBoundController(): base()
    		{
     
    		}	
    	}
    Mon InterceptCall context
    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
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
     
    	[AttributeUsage(AttributeTargets.Class)]
    	public class InterceptCallAttribute : ContextAttribute
    	{
    		public InterceptCallAttribute(): base("InterceptCall")
    		{
     
    		}
     
    		public override void GetPropertiesForNewContext(System.Runtime.Remoting.Activation.IConstructionCallMessage ctorMsg)
    		{
    			ctorMsg.ContextProperties.Add(new InterceptContextProperty());
    		}
    	}
     
    	public class InterceptContextProperty : IContextProperty, IContributeObjectSink
    	{
     
    		#region IContextProperty Members
     
    		public void Freeze(Context newContext)
    		{
     
    		}
     
    		public bool IsNewContextOK(Context newCtx)
    		{
    			return true;
    		}
     
    		public string Name
    		{
    			get { return "InterceptCall"; }
    		}
     
    		#endregion
     
    		#region IContributeObjectSink Members
     
    		public System.Runtime.Remoting.Messaging.IMessageSink GetObjectSink(MarshalByRefObject obj, System.Runtime.Remoting.Messaging.IMessageSink nextSink)
    		{
    			return new InterceptSink(nextSink);
    		}
     
    		#endregion
    	}
     
    	public class InterceptSink: IMessageSink
    	{
     
    		public InterceptSink(IMessageSink nextSink)
    		{
    			_nextSink = nextSink;
    		}
     
    		#region IMessageSink Members
     
    		public IMessageCtrl AsyncProcessMessage(IMessage msg, IMessageSink replySink)
    		{
    			return NextSink.AsyncProcessMessage(msg, replySink);
    		}
     
    		private readonly IMessageSink _nextSink;
    		public IMessageSink NextSink
    		{
    			get 
    			{
    				return _nextSink;
    			}
    		}
     
    		public IMessage SyncProcessMessage(IMessage msg)
    		{
    			return NextSink.SyncProcessMessage(msg);
    		}
     
    		#endregion
    	}

    Voila, le probleme se retrouve au niveau de cette injection
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    private SubSystemsController _controller;
    		[CreateNew]
    		public SubSystemsController Controller
    		{
    			private get { return _controller; }
    			set { _controller = value; }
    		}
    Je doit absolument passé par un CreateNew, sinon l'injection dans le SubSystemsController ne se fait pas.

    La ligne du CAB qui throw l'exception est celle-ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    existing = FormatterServices.GetSafeUninitializedObject(typeToBuild);
    Qqn a déja utiliser du ContextBound avec le CAB ?

  2. #2
    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
    Resolved!

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

Discussions similaires

  1. Création .cab avec ressources localisées
    Par LaNat dans le forum Windows Mobile
    Réponses: 1
    Dernier message: 09/01/2008, 10h12
  2. Création de .cab
    Par koaxe dans le forum Windows Mobile
    Réponses: 1
    Dernier message: 22/10/2007, 12h33
  3. Création de fichiers CAB
    Par Polux63 dans le forum Windows
    Réponses: 5
    Dernier message: 22/08/2004, 10h50
  4. FOXPRO 2.6 : erreur créations du /des fichiers CAB
    Par breihtiti dans le forum Autres SGBD
    Réponses: 2
    Dernier message: 16/11/2002, 11h28
  5. Création image BMP
    Par Anonymous dans le forum C
    Réponses: 2
    Dernier message: 25/04/2002, 16h04

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