The Unity and Workflow infrastructure, created for the MAMLConverter application, provides an extensible framework. For example, to add a new HTML tag (for conversion to MAML) a developer only has to update the Resource file, add the new Tag<newTag>Command.cs file, compile and deploy. An excerpt from the TagH2Command.cs command follows:
namespace Workflow.Library.TagCommands
{
/// <summary>
/// H2 tag
/// </summary>
public class TagH2Command : TagCommandBase
{
/// <summary>
/// Executes this instance.
/// </summary>
public override void Execute()
{
// TODO: support attributes
MAMLTag = Resources.h2;
}
}
Unity simplifies matters, we don't have an actual Factory class however we do have a class used to register the ITagCommands that will be used by Unity to resolve the concrete class.
As each html tag hits the ElementProcessorActivity (in a ReplicatorActivity) it request the MAMLTag from the service.
The service turns to Unity to resolve the ITagCommand for the specified htmlTag
/// <summary>
/// Gets the MAML tag.
/// </summary>
/// <param name="htmlTag">The HTML tag.</param>
/// <returns></returns>
public string GetMAMLTag(string htmlTag)
{
// We'll use the unity container as a factory
ITagCommand TagCommand;
// Ensure we have a configured ITagCommand - workaround:
// http://www.codeplex.com/unity/WorkItem/View.aspx?WorkItemId=1991
try
{
TagCommand = UnityContainer.Resolve<ITagCommand>(htmlTag);
TagCommand.Execute();
}
catch
{
return htmlTag;
}
return TagCommand.MAMLTag;
}
Tags:
workflow,
unity,
factory
Categories:
Unity |
Workflow