35

Building Extensible RIAs with MEF

Embed Size (px)

DESCRIPTION

PDC 2009 Talk on building extensible Silverlight 4.0 applications using the new managed extensibility framework.

Citation preview

Page 1: Building Extensible RIAs with MEF
Page 2: Building Extensible RIAs with MEF

Building Extensible Rich Internet Applications with the Managed Extensibility FrameworkGlenn BlockProgram ManagerMicrosoft Corporation

Page 3: Building Extensible RIAs with MEF

What we’ll cover

Page 4: Building Extensible RIAs with MEF

RIA Extensions, add-ins, and plugins oh my!

Page 5: Building Extensible RIAs with MEF

Extensibility implants

Page 6: Building Extensible RIAs with MEF

Turning fat apps into slimmer apps

Page 7: Building Extensible RIAs with MEF

Reality

RIA 1.0

Page 8: Building Extensible RIAs with MEF

Reality

A

We need….

We need…..

BC

RIA 1.0

We need…..

D

EF

GH

IJ

K

We need…..We need…..

We need…..

We need…..

We need…..

We need…..

We need….

Page 9: Building Extensible RIAs with MEF

Managed Extensibility Framework

The Managed Extensibility Framework (MEF) is a new library in Silverlight 4 for building applications that can be incrementally extended.

> For customers> For you and your team > Always there, always ready

Page 10: Building Extensible RIAs with MEF

MEF Basics…An Application is built of

parts.

Page 11: Building Extensible RIAs with MEF

Hello MEF in Silverlight

Demo

Page 12: Building Extensible RIAs with MEF

MEF Basics…

Export it.

Import it.

Compose it.

Page 13: Building Extensible RIAs with MEF

Export it.

Widget1

[Export(typeof(UserControl))]public class Widget1 : UserControl{

public string Message { get{return(string) Button.Content;}

set{Button.Content=value;} }}

Export

UserControl

Page 14: Building Extensible RIAs with MEF

Import it.

Widget1

[Export(typeof(UserControl))]public class Widget1 : UserControl{

[Import]public string Message { get{return(string) Button.Content;}

set{Button.Content=value;} }}

Import

String

Page 15: Building Extensible RIAs with MEF

Import it.

Widget1

[Export(typeof(UserControl))]public class Widget1 : UserControl{

[Import(“HelloMEF.Message”)]public string Message { get{return(string) Button.Content;}

set{Button.Content=value;} }}

Import

“HelloMEF.Message”

Page 16: Building Extensible RIAs with MEF

Import it.

MainPage

[Export(typeof(UserControl))]public class MainPage: UserControl{

[ImportMany(typeof(UserControl))]public IEnumerable<UserControl> { get;set;}

}

ImportMany

UserControl

Page 17: Building Extensible RIAs with MEF

Compose it.

PartIntializer: “Compose yourself”

MainPage Compose

public MainPage() { InitializeComponent(); PartInitializer.SatisfyImports(this); }

Page 18: Building Extensible RIAs with MEF

Be different – Use metadata

Page 19: Building Extensible RIAs with MEF

Widget

Widget

Where does the widget

go?

Page 20: Building Extensible RIAs with MEF

Export it - Metadata

Widget1

[ExportMetadata(“Location”,Location.Top)][Export(typeof(UserControl))]public class Widget1 : UserControl{

public string Message { get{return(string) Button.Content;}

set{Button.Content=value;} }}

Export

UserControl

Put me in the top

Page 21: Building Extensible RIAs with MEF

Import it - Metadata

MainPage

[Export(typeof(UserControl))]public class MainPage: UserControl{

[ImportMany(typeof(UserControl))]public IEnumerable<Lazy<UserControl, IWidgetMetadata> { get;set;}

}

ImportMany

UserControl

Page 22: Building Extensible RIAs with MEF

Have it your way! – Custom Exports

Page 23: Building Extensible RIAs with MEF

Export it - Metadata

Widget1

[ExportMetadata(“Location”,Location.Top)][Export(typeof(UserControl))]public class Widget1 : UserControl{

public string Message { get{return(string) Button.Content;}

set{Button.Content=value;} }}

Export

UserControl

Put me in the top

Page 24: Building Extensible RIAs with MEF

Customize it – Custom exports

Widget1

[Widget(Location=Location.Top)]public class Widget1 : UserControl{

public string Message { get{return(string) Button.Content;}

set{Button.Content=value;} }}

Export

UserControl

Put me in the top

Page 25: Building Extensible RIAs with MEF

Putting it all together

Demo

Page 26: Building Extensible RIAs with MEF

Trim up your appsbreak up your XAPs

Demo

Page 27: Building Extensible RIAs with MEF

MEF and Prism

Ariel [email protected]/blogs/arielbh

DeveloperSela Group

partner

Page 28: Building Extensible RIAs with MEF

Introducing MEF-Prism integration

> Our Goal :

Enable an existing Prism application to be further extended through

MEF

> Enabled MEF modules to be added dynamically on the fly.

> Enable MEF discovered components to be registered in IoC container (Such as Unity).

Page 29: Building Extensible RIAs with MEF

Introducing MEF-Prism integration

> Prism application starts and loads up known modules.

Module Loader

Page 30: Building Extensible RIAs with MEF

Introducing MEF-Prism integration> Prism application can load unknown

plugins, by using MEF as an abstraction layer.

1. Plugins are located and added to a MEF catalog.

Server

Page 31: Building Extensible RIAs with MEF

Introducing MEF-Prism integration> Prism application can load unknown

plugins, by using MEF as an abstraction layer.

2. Plugins register dependencies with current IoC container.

Server

Page 32: Building Extensible RIAs with MEF

Introducing MEF-Prism integration> Prism application can load unknown

plugins, by using MEF as an abstraction layer.

3. Plugins are activated. Dependencies are injected.

Server

Page 33: Building Extensible RIAs with MEF

Where can I get it?

> MEF ships in Silverlight 4.0> Dynamic XAP support in SL 4.0 Toolkit> Silverlight 3.0 support on Codeplex> MEF source ships under MSPL

Learn more:Silverlight.netMEF.Codeplex.comMEFContrib.Codeplex.com – Prism/MEFblogs.msdn.com/gblock

Page 34: Building Extensible RIAs with MEF

MEF Cross-platform(s)

Jackson [email protected] Software EngineerMoonlight Project

partner

Page 35: Building Extensible RIAs with MEF

© 2009 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries.The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.