Utilizzo delle Dependency Properties nello sviluppo di activities custom con Workflow Foundation

di Giuseppe Marchi, in Windows Workflow Foundation,

La potenza di Windows Workflow Foundation, oltre ai vari meccanismi di persistenza e di dipendenza, sta nel suo grado di estensione, in quanto possono essere sviluppate nuove activities custom, per soddisfare le proprie esigenze e per rendere i propri flussi ancora più personalizzati e completi rispetto a quanto è già presente di default all'interno del framework.

Nel corso dello sviluppo di activities personalizzate per i propri workflow, non può essere tralasciato l'utilizzo delle Dependency Properties, di cui si servono in maniera decisamente marcata i framework stessi di Workflow Foundation e Presentation Foundation.

Per quanto riguarda Windows Workflow Foundation, le Dependency Properties, nella maggior parte delle implementazioni, fungono da repository dello stato del nostro workflow, in quanto sono state create per contenere delle informazioni che possono non essere presenti all'avvio del workflow, ma che vengano valorizzate nel corso della sua esecuzione.
In altri contesti, invece, queste possono essere utilizzate per contenere dei metadati o per creare delle proprietà cosiddette "attached" che possono essere utilizzate dalle altre activity del workflow.

Le Dependency Properties hanno però la possibilità di funzionare solamente grazie alla presenza di oggetti che ereditano dalla classe DependencyObject (classe base di tutte le activities), poiché essa provvede a contenere una collezione di oggetti chiave-valore che corrispondono al nome della proprietà di dipendenza e al suo valore corrente.
Senza essere contenute in activities, quindi, le Dependency Properties non avrebbero motivo di esistere.
Per le Dependency Properties sono state definite tre differenti implementazioni:

  • Instance Properties
  • Metadata Properties
  • Attached Properties

Ognuna utile a coprire un certo tipo di comportamento e funzionalità.

Instance Properties

Sono la prima implementazione delle Dependency Properties, e anche la più utile, in quanto può essere eseguito il bind di queste proprietà di dipendenza su ogni proprietà, evento, campo o metodo della nostra classe workflow e permettere così a quei costrutti di recuperare il valore attuale dell'informazione richiesta.

La classe ActivityBind permette alle informazioni memorizzate mediante instance properties di muoversi da un'activity ad un'altra all'interno del workflow e di cambiare i loro valori nel corso dell'avanzamento del flusso. Questa classe rappresenta, infatti, un'espressione dichiarativa di binding di dati, in grado di riferirsi alla Dependency Property associata attraverso il suo nome (attributo name) e il suo percorso (attributo path).

La dichiarazione di una proprietà avviene attraverso il metodo statico Register della classe DependencyProperty che permette la creazione di una nuova istanza della classe e la definizione del nome della proprietà associata, il suo tipo e il tipo dell'activity padre.
Ecco, quindi, come WF associa alla proprietà MailBody della classe Workflow1 la proprietà di dipendenza MailBodyProperty:

public static DependencyProperty MailBodyProperty = DependencyProperty.Register("MailBody", typeof(System.String), typeof(Test.Workflow1));

[ValidationOptionAttribute(ValidationOption.Optional)]
[BrowsableAttribute(true)]
[CategoryAttribute("Misc")]
public String MailBody
{
    get
    { return ((string)(base.GetValue(Test.Workflow1.MailBodyProperty))); }
    set
    { base.SetValue(Test.Workflow1.MailBodyProperty, value); }
}
4 pagine in totale: 1 2 3 4

Attenzione: Questo articolo contiene un allegato.

Contenuti dell'articolo

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti