40
Managed Extensibility Framework (MEF) Mohamed Meligy Code: 02F01

Managed Extensibility Framework (MEF)

Embed Size (px)

DESCRIPTION

Managed Extensibility Framework (MEF)

Citation preview

Page 1: Managed Extensibility Framework (MEF)

Managed Extensibility Framework (MEF)

Mohamed Meligy

Code: 02F01Code: 02F01

Page 2: Managed Extensibility Framework (MEF)

Extensibility

Extensions

Page 3: Managed Extensibility Framework (MEF)
Page 4: Managed Extensibility Framework (MEF)

• DI is all about wiring up objects

• Come on, that isn’t hard. We’ve been doing that for years!

Page 5: Managed Extensibility Framework (MEF)

Web AppWeb App

Stock QuotesStock Quotes AuthenticatorAuthenticator

Error HandlerError Handler LoggerLogger DatabaseDatabase

This example was created by Jim Weirich in Ruby on his blog. See his original article http://onestepback.org/index.cgi/Tech/Ruby/DependencyInjectionInRuby.rdoc

Page 6: Managed Extensibility Framework (MEF)
Page 7: Managed Extensibility Framework (MEF)

• How does the StockQuotes find the Logger?

• How does the Authenticator find the database?

• Etc.?

• Suppose you want to use a TestingLogger instead? Or a MockDatabase?

Page 8: Managed Extensibility Framework (MEF)
Page 9: Managed Extensibility Framework (MEF)

public class MyLocator : ILocator

{protected Dictionar

y<Type, object> dict =

new

Dictionary<Type,object>();

public MyLocator()

{dict.Add(typeof(ILo

gger), new Logger());

dict.Add(typeof(IErrorHandler),

new ErrorHandler(this));

dict.Add(typeof(IQuotes), new

StockQuotes(this));

dict.Add(typeof(IDatabase), new

Database(this));

dict.Add(typeof(IAuthenticator),

new Authenticator(this));

dict.Add(typeof(WebApp), new WebApp(th

is));

}}

Page 10: Managed Extensibility Framework (MEF)

public class StockQuotes{public StockQuotes(ILocator locator){errorHandler = locator.Get<IErrorHandler>();logger = locator.Get<ILogger>();}

// More code here...}

public class StockQuotes{public StockQuotes(ILocator locator){errorHandler = locator.Get<IErrorHandler>();logger = locator.Get<ILogger>();}

// More code here...}

Page 11: Managed Extensibility Framework (MEF)

• Classes are decoupled from explicit imlementation types

• Easy to externalize the config

Page 12: Managed Extensibility Framework (MEF)

• Everyone takes a dependency on the ILocator

• Hard to store constants and other useful primitives

• Creation order is still a problem

Page 13: Managed Extensibility Framework (MEF)

• Gets rid of the dependency on the ILocator

• Object is no longer responsible for finding its dependencies

• The container does it for you

Page 14: Managed Extensibility Framework (MEF)

• Write your objects the way you want• Setup the container• Ask the container for objects• The container creates objects for you and

fulfills dependencies

Page 15: Managed Extensibility Framework (MEF)

DIContainer container = new DIContainer();

container.Register<ILogger, Logger>();

container.Register<IDatabase, Database>();

container.Register<IErrorHandler,

ErrorHandler>();

container.Register<IQuotes, StockQuotes>();

container.Register<IAuthenticator,

Authenticator>();

container.Register<IWebApp, WebApp>();

Page 16: Managed Extensibility Framework (MEF)
Page 17: Managed Extensibility Framework (MEF)
Page 18: Managed Extensibility Framework (MEF)

• To Singleton or Not to Singleton?• Nested Containers• Property Setter• Object Lifetime• Method Invocation• Event Wire-up• Instrumentation• Method Interception via Dynamic Proxies

Page 19: Managed Extensibility Framework (MEF)

• Spring.NET• Castle Windsor• StructureMap• Microsoft Unity (Enterprise Library)• MEF ?????

Page 20: Managed Extensibility Framework (MEF)
Page 21: Managed Extensibility Framework (MEF)
Page 22: Managed Extensibility Framework (MEF)

• Hard to enable, hard to create• Many extensibility models• Extensibility

– Extending the extensions

2

Page 23: Managed Extensibility Framework (MEF)

Application

ToolWindow AToolWindow A

ToolWindow BToolWindow B

Contacts Call Support Help

File Edit View Tools Help

Page 24: Managed Extensibility Framework (MEF)

ApplicationApplication

Extension A

Extension A

Extension B

Extension B

Need a Toolwindow

Need a Toolwindow

Got a Toolwindow

Got a Toolwindow

Need MenusNeed

Menus

Got aMenuGot aMenu

Need a MenuService

Need a MenuService

Got a MenuService

Got a MenuService

Page 25: Managed Extensibility Framework (MEF)
Page 26: Managed Extensibility Framework (MEF)

Windows And Menus With MEF

public interface IToolWindow { }public interface IMenuService { } public interface IMenu { } public class Application{ [Import] public IEnumerable<IToolWindow> ToolWindows { get; set; }  [Import] public IEnumerable<IMenu> Menus { get; set; }} [Export(typeof(IMenuService))]public class MenuService : IMenuService { }

Page 27: Managed Extensibility Framework (MEF)

[Export(typeof(IToolWindow))]public class SomeToolWindow : IToolWindow{ [Import] public IMenuService MenuService { get; set; }} [Export(typeof(IMenu))]public class SomeMenu : IMenu{}

 

Windows And Menus With MEF

Page 28: Managed Extensibility Framework (MEF)

First, The Composable Part

Part A

Page 29: Managed Extensibility Framework (MEF)

Parts Relate Through Contracts

Part B

Part A

Page 30: Managed Extensibility Framework (MEF)

Imports Are Contracts A Part Needs

Part B

ImportImport

ImportImport

Page 31: Managed Extensibility Framework (MEF)

ExportExport

ExportExport

Exports Are Contracts A Part Offers

Part B

Page 32: Managed Extensibility Framework (MEF)

The Container Is The Matchmaker

Container

Page 33: Managed Extensibility Framework (MEF)

CatalogCatalog

Container Queries Catalogs

Container

Page 34: Managed Extensibility Framework (MEF)

Parts Can Load Lazily

Part B

Part A

Export<A>Export<A>

Page 35: Managed Extensibility Framework (MEF)

ContainerContainer

Parts Can Have Different Lifetimes

Part A

SingletonSingleton

Part A Part A Part A

FactoryFactory

Page 36: Managed Extensibility Framework (MEF)
Page 37: Managed Extensibility Framework (MEF)
Page 38: Managed Extensibility Framework (MEF)

• Part of the framework• Microsoft will use it• Developers will use it

– Write add-ins– Create extensible apps

• Microsoft has not decided

Page 39: Managed Extensibility Framework (MEF)

• http://www.codeplex.com/MEF– MEF Home

• http://tinyurl.com/MEFGuide– Programming Guide

• http://tinyurl.com/MEFDiscussions– Discussions

• http://tinyurl.com/MEFBlogs– Team Blogs

• http://channel9.msdn.com/pdc2008/TL33/– MEF @ PDC 2008

• http://blogs.msdn.com/gblock/– Glenn Block, The MEF Guy

[email protected]/meligy

Code: 02F01Code: 02F01

Page 40: Managed Extensibility Framework (MEF)

• MEF Preview 4 Source Code & Samples– http://www.codeplex.com/MEF/Release/

ProjectReleases.aspx?ReleaseId=22313

• MEF Article Formatter Sample– http://blogs.conchango.com/robhenry/

archive/2008/11/11/managed-extensibility-framework-mef.aspx

• MEF Grid Sample– http://blogs.msdn.com/dsplaisted/archive/

2009/01/14/mefgrid-a-sample-mef-application.aspx