かずきのBlog

C#やJavaやRubyとメモ書き

目次

Blog 利用状況

ニュース

わんくまBlogが不安定になったため、前に書いてたはてなダイアリーにメインを移動します。
かずきのBlog@Hatena
技術的なネタは、こちらにも、はてなへのリンクという形で掲載しますが、雑多ネタははてなダイアリーだけに掲載することが多いと思います。
コメント
プログラマ的自己紹介
お気に入りのツール/IDE
プロフィール
経歴
広告
アクセサリ

書庫

日記カテゴリ

[C#][MEF]Managed Extensibility Framework入門 その4

[C#][MEF]Managed Extensibility Framework入門 その1
[C#][MEF]Managed Extensibility Framework入門 その2
[C#][MEF]Managed Extensibility Framework入門 その3

今回は、ExportAttributeをプロパティにつけたときの動作を見てみようと思います。
今までのExportは、一般的なDIコンテナにありがちな感じで、クラスにつけて他のクラスから使えるようにしていました。

このExport属性は、実はクラスだけではなく、プロパティにつけることもできます。こうすることで、プロパティの戻り値をImportのついているプロパティに設定することが出来ます。

using System;
using System.ComponentModel.Composition;

namespace MEFExportEdu
{
    // メッセージを提供する人
    public class MessageProvider
    {
        // Messageという名前でExport
        [Export("Message")]
        public string GreetMessage
        {
            get
            {
                return "Hello world";
            }
        }
    }

    [Export]
    public class Greeter
    {
        // MessageをImport
        [Import("Message")]
        public string Message { get; set; }

        public void Greet()
        {
            // 結果としてHello worldが表示されます
            Console.WriteLine(Message);
        }
    }

}

そして、確認用のMainを作ります。

using System.ComponentModel.Composition.Hosting;

namespace MEFExportEdu
{
    class Program
    {
        static void Main(string[] args)
        {
            var catalog = new AssemblyCatalog(typeof(Program).Assembly);
            var container = new CompositionContainer(catalog);

            // 実行!
            var g = container.GetExportedObject<Greeter>();
            g.Greet();
        }
    }
}

実行するとHello worldが表示されます。
image

この例では、とても無駄なような気がしますが、構成ファイルから読み込んだ文字列を、属性を指定するだけでさくっと取得できるようなことも出来そう。

投稿日時 : 2009年7月2日 0:22

Feedback

# welded ball valve 2012/10/19 1:03 http://www.jonloovalve.com/Full-welded-ball-valve-

I really like your writing style, great info, appreciate it for posting :D. "I will show you fear in a handful of dust." by T. S. Eliot.

# Nike Air Max 95 Womens 2012/12/08 0:24 http://superairmaxshoes.webs.com/

I like this post, enjoyed this one appreciate it for putting up. "No man is wise enough by himself." by Titus Maccius Plautus.

# Christian Louboutin boots 2012/12/08 3:28 http://mychristianlouboutinonline1.webs.com/

I like this post, enjoyed this one regards for posting. "To the dull mind all nature is leaden. To the illumined mind the whole world sparkles with light." by Ralph Waldo Emerson.

# トリーバーチ 2012/12/14 20:38 http://www.torybruchjp.info/category/トリーバーチ-靴

The only individuals who would search good donning these fugly things would be Ferrari pit crew while in the pits:D

# burberry uk 2012/12/15 22:47 http://www.burberryuksale.co/burberry-uk-bags-c-48

This may be a really excellent site posting, im delighted I recently came across it.

# NuXHLzGLCNKVOZt 2014/08/28 11:28 http://crorkz.com/

9qjj3c It's actually a great and useful piece of information. I'm happy that you simply shared this helpful information with us. Please keep us up to date like this. Thanks for sharing.

タイトル  
名前  
Url
コメント