Silverlight mef

481 views

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 http://www.bendewey.com/blog http://twitter.com/bendewey
  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• http://mef.codeplex.com• http://microsoftpdc.com/Sessions/FT24 – Building Extensible Rich Internet Applications with the Managed Extensibility Framework (Glenn Block)• http://channel9.msdn.com/shows/SilverlightTV/
  12. 12. New York City Spring 2010 http://www.agilefirestarter.com twitter: @agilefire Saturday March 27, 2010
  13. 13. Thank You

×