Home > C# > 目的別資料 > アドイン・モデル > MEF

Managed Extensibility Framework(MEF)とは?

新規作成日 2016-08-04
最終更新日

Managed Extensibility Framework (MEF) は、軽量で拡張可能な(言い換えると、アドイン、プラグインに対応した)アプリケーションを作成するためのライブラリです。 また、Visual Studio 2010の拡張機能はMEFベースで作られています。

MEFは、本来の目的である拡張可能なアプリケーションを作成することだけでなく、汎用目的の依存性の注入(Dependency Injection(DI)) フレームワーク,あるいは制御反転(Inversion of Control(IoC))コンテナとして使われています。つまり、C#で、DIとIoCの概念を理解し、利用するための情報は、MEFの周辺にあります。そのため、DIとIoCを避けて通ることができなけれは、同じように、MEFも避けて通ることができません。

デザインパターンのMVVMだけでなく、DIとIoCは、現在、多くのプログラミングで使われています。LINQやラムダ式とシリアライズなどの後から機能と同じように、C#でプログラミングを行うために知っておくべき内容の1つになっています。理解できていないと、それらを使用したコードを理解することができません。

MEFを使用するための準備

MEFが、.Net Freameworkにはじめから含まれているのは、.Net 4.0(Visual Studio 2010)だけです。それ以降の環境で利用するためには、Microsoft CompositionをNugetマネージャーを使って取得しておく必要があります。一度、パッケージをインストールすると意識することがないため、「Microsoft Composition」をインストールする必要があることに触れていない情報が多いので、提供されているサンプルが動かない場合は確認してみましょう。

NuGetパッケージの管理を選択

プロジョクトを開始した後、ソリューション・エクスプローラーの参照を右クリックし、NuGetパッケージの管理を選択します。

検索窓に、「Microsoft.Composition」を入力し検索します。

検索窓に、「Microsoft.Composition」を入力し検索します。

検索結果に現れる「Microsoft.Composition」を選択し、インストールします。

検索結果に現れる「Microsoft.Composition」を選択し、インストールします。.Net 4.61(Visual Studio 2017)には、正式に対応していないようですが使用できると思います。

プロジェクトを開始する際、「System.ComponentModel.Composition」への参照を追加する必要があります。

ファイル、新規作成、プロジェクを選択します。

ファイル、新規作成、プロジェクを選択します。

コンソールアプリ(.Net Freamework)を選択し、名前を指定します。

コンソールアプリ(.Net Freamework)を選択し、名前を指定します。

コンソールアプリ(.Net Freamework)を選択し、名前を指定します。

ソリューションエクスプローラーから、参照で、右クリックし、参照の追加を選択します。

ソリューションエクスプローラーから、参照で、右クリックし、参照の追加を選択します。

アセンブリを選択し、項目の中から、「System.ComponentModel.Composition」を探し、チェックを入れ、OKをクリックします。

アセンブリを選択し、項目の中から、「System.ComponentModel.Composition」を探し、チェックを入れ、OKをクリックします。項目が存在しなければ、NuGetパッケージの管理から、「Microsoft.Composition」をインストールしたあと操作して下さい。

これで、MEFアプリケーションを作成する環境が準備できました。書籍やインターネット上で紹介されているサンプルプログラムを実行できます。

ドキュメント

MEFについては、チュートリアルやサンプルプログラムも含めて情報を見つけることができないと思っているのですが、Visual Studioの拡張機能の作成についての書籍に、記述がありました(詳しいかどうかは判断できませんが)。

このエントリーをはてなブックマークに追加

Home PC C# Illustration

Copyright (C) 2011 Horio Kazuhiko(kukekko) All Rights Reserved.
kukekko@gmail.com
ご連絡の際は、お問い合わせページのURLの明記をお願いします。
「掲載内容は私自身の見解であり、所属する組織を代表するものではありません。」