Silverlight mef


Published on

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Silverlight mef

  1. 1. Building Modular SilverlightApplications with theManaged Extensibility Framework Ben Dewey twentysix New York
  2. 2. We thank the following companies for their gracious sponsorship Platinum Sponsors Gold Sponsor
  3. 3. Assumptions• Basic knowledge of – Silverlight – Model-View-ViewModel• Nice to have knowledge of – Loosely Coupled Application Architecture – Inversion of Control Containers
  4. 4. Overview• What is the Managed Extensibility Framework• MEF Basics – Export, Import, Compose• Describing your exports with Metadata• Loading Packages Dynamically• Questions
  5. 5. Preface• Loosely Couple Architecture – Extract functionality to Interfaces• Inversion of Control Containers – Dependency Injection IPlugin obj = new MyPlugin(); IPlugin obj = IoC.Resolve<IPlugin>();
  6. 6. 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.
  7. 7. MEF Basics• Export [Export(typeof(IPlugin))] public class MyPlugin : IPlugin { }• Import [Import] public IPlugin Plugin { get; set; } [ImportMany] public IEnumerable<IPlugin> Plugin { get; set; }• Compose – Populates the entire object graph CompositionInitializer.SatisfyImports(this);
  8. 8. Describing your Exports with Metadata• Use the ExportMetadataAttribute (0-many) [Export(typeof(IPlugin))] [ExportMetadata(“Order”, 1)] public class MyPlugin : IPlugin { }• Binds using the Lazy<T, TMetadata> object to a strongly typed interface public interface IPluginMetadata { int Order { get; set; } }
  9. 9. Recomposition• Imports get set whenever new Exports become available [ImportMany(AllowRecomposition=true)] public IEnumerable<IShape> Shapes { get; set; }
  10. 10. Loading Packages Dynamically• DeploymentCatalog, var catalog = new DeploymentCatalog("MefHolidayShapes.xap"); catalog.DownloadCompleted += catalog_DownloadCompleted; catalog.DownloadAsync();• DeploymentCatalogService DeploymentCatalogService.AddXap("MefHolidayShapes.xap");* DeploymentCatalogService is not included in System.ComponentModel.Composition, comes with the DeploymentCatalogSample Sample application
  11. 11. Links•• – Building Extensible Rich Internet Applications with the Managed Extensibility Framework (Glenn Block)•
  12. 12. New York City Spring 2010 twitter: @agilefire Saturday March 27, 2010
  13. 13. Thank You