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つになっています。理解できていないと、それらを使用したコードを理解することができません。

CodePlexで開発が行われていて公式サイト

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

ドキュメント

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

広告

Home PC C# Illustration

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