Building Modular Silverlight Applications with the Managed Extensibility Framework Ben Dewey twentysix New York
We thank the following companies for their gracious sponsorship Platinum Sponsors Gold Sponsor
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)
New York City Spring March 27, 2010
Thank You