managed extensibility framework or effective development of scalable applications with .net...

Post on 06-May-2015

1.184 Views

Category:

Economy & Finance

2 Downloads

Preview:

Click to see full reader

DESCRIPTION

by Volodymyr Voytyshyn

TRANSCRIPT

Volodymyr Voytyshyn03/17/2012

ManagedExtensibility Framework

Effective Development of Scalable Applications with .NET

Agenda

What is MEF?

Key concepts and features

How to implement …?

What’s new in MEF 2.0?

WHAT IS MEF?

The Problem

No unified approach

for extension application in runtime

The Solution

MEF – Managed Extensibility Framework

Simply

Reliably

Unified

MEF Project

Official Site http://mef.codeplex.com

Developer Microsoft

Started 26.08.2008

License MS Public License(open source)

Last stable release MEF 1 / 12.04.2010(included into .NET 4.0)

MEF focuses on…

Extending of ready-made applications by plugins

Plugin 1 Plugin 2

Application

?

How about reflection?

System.Reflection.*Assembly.Load()

As a result…

The next unique solution

Not reusable components

Extending by 3rd parties plugins

KEY CONCEPTS AND FEATURES

Composable Part

Part

Export

Import

More Composable Parts

ImportImport

ExportExport

The Main Idea - Composition

Composition Container

Composition Container

Creates parts

Dispose parts

Compose parts

The Part

Typed Contract

The Part

Named Contract

The Part

Extension Point

Extension Point

Composition of Parts

Compositionof parts

Don’t forget…

Add reference

System.ComponentModel.Composition.dll

Using namespaces

System.ComponentModel.Composition.*

More About Import

Export Metadata

Key

Value

Getting Exports

Contract

Returns Lazy

Creation Policy

Default value

Shared

NonShared

Any

Shared == Singleton

Any & Any == Shared

References to Parts

Container keeps reference to part if:

– Part is marked as Shared

– Part implements IDisposable

– One or more imports allow Recomposition

Disposing Composition Container

Dispose parts which implement IDisposable

Reference to parts will be cleaned up

Lazy exports won’t work

Catalog

Catalog

CompositionContainer

Discover parts

Compose parts

Catalog Types

Assembly Catalog

Directory Catalog

Type Catalog

Aggregate Catalog

Deployment Catalog(only for Silverlight)

Recomposition Support

Assembly Catalog

Directory Catalog Refresh()

Type Catalog

Aggregate Catalog auto

Deployment Catalog auto

HOW TO IMPLEMENT… ?

MEF-based Dependency Injection

CompositionContainer

Service Locator

TPart Resolve<TPart>()

void Release<TPart>(TPart part) CommonService Locator

MEF Adapter

MEF vs IoC

+ Ease of programming

+ Resolves dependencies between components

+ Automatic component discovery

+ Can compose types, fields, props and methods

- Slower than IoC containers

- Poor component lifetime management

- No component separation (separate appdomain, process)

Plugin-based Desktop Application

Most Useful Tool

Directory Catalog

Composition Container

File System Watcher

Plugins Folder

Trackchanges

Refresh()

Plugin-based Desktop Application

Allow parts recomposition

Assemblies shadow copy

! Plugin assemblycan not be unloaded in runtime

Plugin-based ASP.NET MVC Application

ASP.NET MVC Application

Models Views Plugins

Models Views

Controlle

rs

Controlle

rs

Plugin-based ASP.NET MVC Application

Integrate MEF into ControllerFactory

MEF-based DependencyResolver

? Compile razor view to separate assembly

WHAT’S NEW IN MEF 2.0?

MEF 2.0 and .NET 4.5

Open Generic Parts

Any type

Convention-based Part Registration

Composition Scoping Enhancements

Global Scope

Request Scope

Composition Container

Logger

Customer Controller

Customer RepositoryFor each request

Once

Composition Provider for ASP.NET MVC Registering in composition container:

– Controllers– Action filters– Model binders

Constructor injection for controllers

ASP.NET MVC: processing of parts

Naming convention

Contract identification

Composition Provider for ASP.NET MVC Composition scopes

– Request scope

– Application scope

MEF Offers…

Easy way for:

Composition independent components

Extending without recompiling

Delivering 3rd party plugins

Ask your question…

Thank You!

Copyright © 2011 SoftServe, Inc.

Contacts

Volodymyr Voytyshyn5 Knyahyni Olhy Str., Rivne 33000, Ukraine

Tel: +38(066) 41 83 509

E-mail: vvoit@softserveinc.comvoytyshyn@gmail.com

Skype: voytyshin

top related