By, Ben Dewey Senior Software Developer twentySix New York
Assumptions Basic knowledge of Silverlight Model-View-ViewModel Nice to have knowledge of Loosely Coupled Application Architecture Inversion of Control Containers
Overview What is the Managed Extensibility Framework MEF Basics Export, Import, Compose Describing your exports with Metadata Loading Packages Dynamically Questions
Preface Loosely Couple Architecture Extract functionality to Interfaces Inversion of Control Containers Dependency Injection IPlugin obj = new MyPlugin(); IPlugin obj = IoC.Resolve ();
What is MEF MEF is the Managed Extensibility Framework Create based on the needs of the VS2010 team MEF Preview 9 for SL3 and In the Box for SL4 Why would you want to use it? Loosely Coupled Application Plugin Architecture Limit initial XAP download time.
MEF Basics Export Import Compose Populates the entire object graph CompositionInitializer.SatisfyImports(this); [Import] public IPlugin Plugin { get; set; } [Export(typeof(IPlugin))] public class MyPlugin : IPlugin { } [ImportMany] public IEnumerable Plugin { get; set; }
Describing your Exports with Metadata Use the ExportMetadataAttribute (0-many) Binds using the Lazy object to a strongly typed interface [Export(typeof(IPlugin))] [ExportMetadata(“Order”, 1)] public class MyPlugin : IPlugin { } public interface IPluginMetadata { int Order { get; set; } }
Recomposition Imports get set whenever new Exports become available [ImportMany(AllowRecomposition=true)] public IEnumerable Shapes { get; set; }
Loading Packages Dynamically DeploymentCatalog, DeploymentCatalogService *DeploymentCatalogService is not included in System.ComponentModel.Composition, comes with the DeploymentCatalogSample Sample application DeploymentCatalogService.AddXap("MefHolidayShapes.xap"); var catalog = new DeploymentCatalog("MefHolidayShapes.xap"); catalog.DownloadCompleted += catalog_DownloadCompleted; catalog.DownloadAsync();
Links Building Extensible Rich Internet Applications with the Managed Extensibility Framework (Glenn Block)
Microsoft Design Toolbox