Postare codice con Windows Live Write

Stavo cerando un plug-in per windows live write che permettesse di incollare del codice mantenedo la formattazione per renderlo il più leggibile possibila ma dei prodotti che ho trovato nessuno mi soddisfa.

L'elenco di quelli che ho provato è:

Il primo problema sembra dovuto all'impostazione del tipo di codice, se la impostato su xhtml quando publico vengono persa l'indentazione del codice.

Il secondo è che tutti i tipi non vengono marcati, ovviamente non mi aspetto che li riconosca ma incollado da visual studio mi aspettavo che tenesse le informazioni.

Idee ...

Comunicazione tra Host e Workflow

I workflow non vivono di vita propria ma devono comunicare con gli host a cui sono associati per scambiarsi informazioni riguardanti il flusso che stanno coordinando.

Il modo più semplice per far comunicare questi soggetti è il passaggio di parametri tramite una Dictionary generica che viene passata come parametro al metodo CreateWorkflow().
Questa Dictionary dovrà contenere come chiavi i nomi delle proprietà pubbliche esposte dalla classe workflow che vogliamo passare. 

Dictionary<string, object> parameters = new Dictionary<string, object>(); parameters.Add("ParameterOne", "ValueOne"); parameters.Add("ParameterTwo", 2); workflowInstance = workflowRuntime.CreateWorkflow(typeof(Semple.Workflow1), parameters); instance.Start();

Viceversa se vogliamo ottenere delle informazioni dal workflow possiamo utilizzare la proprietà OutputParameters della classe WorkflowCompletedEventArgs legato all'evento WorkflowCompleted.

workflowRuntime.WorkflowCompleted += delegate(object sender, WorkflowCompletedEventArgs e) { string result = (string)e.OutputParameters["ParameterOne"]; Console.WriteLine(result); waitHandle.Set(); };

 

Un altro metodo prevede di utilizzare delle interfacce per comunicare, anche se è un po' più complesso ci consente di avere più flessibilità e di creare una architettura tipizzata.
Se ad vogliamo che l'host comunichi con il workflow dobbiamo creare un interfaccia decorandola con l'attributo ExternalDataExchange, definire al suo interno un evento che presenta un EventArgs che andremo a personalizzare inserendo le proprietà che ci interessano e facendolo derivare dalla classe ExternalDataEventArgs.
Questo EventArgs dovrà essere serializzabile per permetterne la persistenza.

[ExternalDataExchange] public interface ICommunicationService { event EventHandler<InformationSelectedEventArgs> AccountSelected; void ActionForHost(); } [Serializable] public class InformationSelectedEventArgs : ExternalDataEventArgs { private String information; public String Information { get { return (this.information); } set { this.information = value; } } public InformationSelectedEventArgs(Guid instanceId, String information) : base(instanceId) { this.information = information; } }

Una volta creata questa struttura andremo ad inserire nel workflow una activity di tipo HandleExternalEventActivity a cui associamo l'interfaccia appena creata e il metodo da richiamare.

A questo punto è sufficiente implementare l'interfaccia all'interno dell'host.

public event EventHandler<InformationSelectedEventArgs> InformationSelected; protected virtual void OnInformationSelected(InformationSelectedEventArgs args) { if (InformationSelected != null) InformationSelected(null, args); }
«ottobre»
domlunmarmergiovensab
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910