【MEF】カタログってなんだー。

  • 2010.05.12 Wednesday
  • 07:24
JUGEMテーマ:コンピュータ

MEFを使用するに当たりカタログという言葉が登場します。現状、この言葉がよくわからず調べている状況です。名前の意味をしっかりと捉えていないと、クラス名に登場してもクラスの責務がよくわからないし、それを利用するクラスとの関係もよくわからなくなってしまいます。これは調べないと・・・

カタログの仲間には下記のクラスがあるようです。うーん。

  System.ComponentModel.Composition.Primitives.ComposablePartCatalog
    System.ComponentModel.Composition.Hosting.AggregateCatalog
    System.ComponentModel.Composition.Hosting.AssemblyCatalog
    System.ComponentModel.Composition.Hosting.DirectoryCatalog
    System.ComponentModel.Composition.Hosting.TypeCatalog

【MEF】とりあえずコードを書いてみる。

  • 2010.05.12 Wednesday
  • 07:16
JUGEMテーマ:コンピュータ


Managed Extensibility Framework の概要
http://msdn.microsoft.com/ja-jp/library/dd460648(v=VS.100).aspx

上記のMSDNドキュメントを参考にして、とりあえずMEFを使用してみました。パーツが同一ファイルに書かれているなど、MEFを使用するメリットがまったくないコードですが、とりあえず使用してみたということで紹介。

using System;
using System.ComponentModel.Composition.Hosting;
using System.ComponentModel.Composition;

namespace Sample
{
    class Program
    {
        static void Main()
        {
            var p = new Program();
            Console.WriteLine("Enter Command:");
            while (true)
            {
                string s = Console.ReadLine();
                if (s == "q")
                    break;
                Console.WriteLine(p.Decorate.Execute(s));
            }
        }

        private Program()
        {
            var catalog = new AggregateCatalog();
            catalog.Catalogs.Add(new AssemblyCatalog(typeof(Program).Assembly));
            _container = new CompositionContainer(catalog);
            try
            {
                _container.ComposeParts(this);
            }
            catch (CompositionException compositionException)
            {
                Console.WriteLine(compositionException.ToString());
            }
        }

        private readonly CompositionContainer _container;

        [Import(typeof(IDecorate))]
        public IDecorate Decorate { get; set; }
    }

    public interface IDecorate
    {
        string Execute(string input);
    }

    [Export(typeof(IDecorate))]
    class DecorateImpl : IDecorate
    {
        public string Execute(string input)
        {
            return "[" + input + "]";
        }
    }
}


-----
CompositionContainerクラスを使用するにはSystem.ComponentModel.Composition.dllを参照する必要があります。名前空間はSystem.ComponentModel.Composition.Hosting。

_container.ComposeParts(this);
は拡張メソッドで名前空間がSystem.ComponentModel.Compositionになっているのでメソッドを見つけるのに多少苦労しました。



MSDNドキュメントを参考にして書いてみただけなので、コードがおまじないにしか見えない状況なので精進します(涙)

【MEF】MEFを知るための手始めとなるサイト

  • 2010.05.11 Tuesday
  • 20:14
JUGEMテーマ:コンピュータ

Managed Extensibility Framework による .NET 4 で構成可能なアプリケーションの構築
http://msdn.microsoft.com/ja-jp/magazine/ee291628.aspx

上記はMSDNマガジンの記事ですが、MEFが紹介されています。非常にわかりやすいので、まずここを見ることをお勧めします。

途中、MEFに登場する概念の説明が簡単に紹介されていますが、非常に明快でシンプルな表現なのでなんとなく使ってもいないMEFがわかった気になりました(笑)またサンプルコードと概念の関連もわかりやすいので、一人でなっとくしてしまいました。

記事を箇条書きにしただけですが・・・紹介すると。

■構成可能なパーツ
他のパーツにサービスを提供する。
他のパーツから提供されるサービスを利用する。
MEFのパーツは、アプリケーションの内外の任意の場所から取得できる。

■エクスポート
パーツから提供するサービス。
パーツがエックスポートを提供することを”エックスポートする”という。
大半のパーツは単一のエックスポートを提供する。

■インポート
パーツが利用するサービス。
パーツがインポートを利用する場合、パーツに”インポートする”という。

■コントラクト
エクスポートまたはインポートの識別子。
MEFでは、コントラクト名が型から派生するため、ほとんどの場合コントラクトを考慮する必要はない。

■構成
各パーツはMEFによって組み立てられる。

■プログラミング モデル: MEF の外見
MEFでは、既定で属性プログラミングモデルが提供されている。
MEF利用できるプログラミングもでるは多数あり、MEFのコアAPIは属性にまったく依存していない。

【MEF】MEFを学習する。その1

  • 2010.05.11 Tuesday
  • 04:41
JUGEMテーマ:コンピュータ
 
とりあえず下記を読んだらよさそうですね。
http://msdn.microsoft.com/ja-jp/library/dd460648.aspx

と、いっても「MEFとは」というくだりから始まる文章は正直意味がわからないのですが・・・はい。

ちょっと国語力が必要なようです。とくに

「アプリケーション開発者」
「拡張機能の開発者」
「機能拡張のサポートを提供する必要のある大規模アプリケーションの設計担当者」

など誰がというところを、念頭において読んでいこうと思います。個人的には読むよりコードを書いて動かすほうが好きなのですが・・・まだ、そこまでいけない。できない。うん(涙)

---------
わかったところ。

・MEFとはManaged Extensibility Frameworkの略称
・MEFは.NET Framework 4に含まれている。

calendar

S M T W T F S
1234567
891011121314
15161718192021
22232425262728
293031    
<< December 2019 >>

あわせて読みたい

あわせて読みたいブログパーツ

selected entries

categories

archives

recent comment

  • 【キーボード】6年前のRealForceを復活させることはできる!?その3
    art55 (05/22)
  • 【キーボード】6年前のRealForceを復活させることはできる!?その3
    分解大好き (05/18)
  • 【.NET Framework 4.5】 IListがIReadOnlyListを継承してない理由。
    art55 (02/04)
  • 【.NET Framework 4.5】 IListがIReadOnlyListを継承してない理由。
    Gen (02/04)
  • 【キーボード】RealForce が壊れて帰ってきた。
    art55 (04/29)
  • 【.NET Framework 4.5】 IListがIReadOnlyListを継承してない理由。
    art55 (02/23)
  • 【.NET Framework 4.5】 IListがIReadOnlyListを継承してない理由。
    かるあ (02/22)
  • 【C#】Dictionaryの実装・データ構造・アルゴリズムを観察する。
    art55 (01/16)
  • 【C#】Dictionaryの実装・データ構造・アルゴリズムを観察する。
    karuakun (01/16)
  • 【NetOffice】【Excel】死なないExcelプロセスをKillする。
    art55 (12/05)

recent trackback

recommend

recommend

recommend

C#プログラマのための.NETアプリケーション最適化技法 (Programmer's SELECTION)
C#プログラマのための.NETアプリケーション最適化技法 (Programmer's SELECTION) (JUGEMレビュー »)
Sasha Goldshtein,Dima Zurbalev,Ido Flatow,サシャ・ゴルドシュタイン,ディマ・ズルバレフ,イド・フラトー

recommend

ろんりと集合
ろんりと集合 (JUGEMレビュー »)
中内 伸光
とてもわかりやすいです。

recommend

recommend

シャノン・ノイマン・ディジタル世界
シャノン・ノイマン・ディジタル世界 (JUGEMレビュー »)
市川 忠男
4章がリレーショナルデータベースな内容になってます。ページ数があまりありませんが、ポイントがものすごく的確にまとまっていて、感動します。

recommend

recommend

東プレ Realforce91UBK-S 静音キーボード 静電容量無接点方式 変荷重 ブラック NG01BS
東プレ Realforce91UBK-S 静音キーボード 静電容量無接点方式 変荷重 ブラック NG01BS (JUGEMレビュー »)

テンキーレス、静音のRealForce91UBK-S。スコスコ感がたまらなく気持ちいいです。家と会社で2台持ってます。

recommend

recommend

プログラミング.NET Framework 第4版 (プログラミングシリーズ)
プログラミング.NET Framework 第4版 (プログラミングシリーズ) (JUGEMレビュー »)
Jeffrey Richter
発売予定美 2013年10月10日。.NET Frameworkとお付き合いする人のバイブルですね。

recommend

recommend

キャット・シッターの君に。
キャット・シッターの君に。 (JUGEMレビュー »)
喜多嶋 隆
私のイラストレータデビュー本です。

recommend

Essential .NET ― 共通言語ランタイムの本質
Essential .NET ― 共通言語ランタイムの本質 (JUGEMレビュー »)
ドン・ボックス,クリス・セルズ,Don Box,Chris Sells,吉松 史彰

links

profile

search this site.

others

mobile

qrcode

powered

無料ブログ作成サービス JUGEM