Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Silverlight mef
1. Building Modular Silverlight
Applications with the
Managed Extensibility Framework
Ben Dewey
twentysix New York
http://www.bendewey.com/blog
http://twitter.com/bendewey
2. We thank the following companies for their gracious sponsorship
Platinum Sponsors
Gold Sponsor
3. Assumptions
• Basic knowledge of
– Silverlight
– Model-View-ViewModel
• Nice to have knowledge of
– Loosely Coupled Application Architecture
– Inversion of Control Containers
4. Overview
• What is the Managed Extensibility Framework
• MEF Basics
– Export, Import, Compose
• Describing your exports with Metadata
• Loading Packages Dynamically
• Questions
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. 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. 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. 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. Recomposition
• Imports get set whenever new Exports
become available
[ImportMany(AllowRecomposition=true)]
public IEnumerable<IShape> Shapes { get; set; }
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