かずきのBlog

C#やJavaやRubyとメモ書き

目次

Blog 利用状況

ニュース

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

書庫

日記カテゴリ

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

過去の関連記事
[C#][MEF]Managed Extensibility Framework入門 その1
[C#][MEF]Managed Extensibility Framework入門 その2
[C#][MEF]Managed Extensibility Framework入門 その3
[C#][MEF]Managed Extensibility Framework入門 その4
[C#][MEF]Managed Extensibility Framework入門 その5

前回は、MethodのExportとImportについて試してみました。
これまでの5回で、基本的なImportとExportについては出来るようになりました。そして、適切にExport属性をつけるだけで勝手に適切なImport属性がついてるプロパティに設定されるのは素敵だということを感じたと思います。

今回は、同じ条件に合致する複数のExport属性があるときのImportの仕方について見ていこうと思います。

見ていくといっても大して書くことはなくて、これまで

[Import]
public TPropertyType PropertyName { get; set; }

のように普通のプロパティにしていた部分を

[Import]
public List<TPropertyType> PropertyName { get; set; }

のようにコレクションにするだけでExportが複数ある場合にコレクションにImportされるようになります。

ということで簡単に動きを見ていきます。
とりあえず、MEFEduというコンソールアプリケーションを作って、System.ComponentModel.Composition.dllを参照に追加して、いつもどおりのコンテナの初期化のコードを書きます。

using System.ComponentModel.Composition.Hosting;

namespace MEFEdu
{
    class Program
    {
        static void Main(string[] args)
        {
            // コンテナの初期化
            var catalog = new AssemblyCatalog(
                typeof(Program).Assembly);
            var container = new CompositionContainer(catalog);
        }
    }
}

まず、GreetAppクラスを作成します。Actionのコレクションのプロパティを定義して、Import(“Greet”)という属性を付けています。ついでに、Mainのほうも、コンテナからGreetAppのインスタンスを取得して実行するようにします。

using System.ComponentModel.Composition.Hosting;
using System;
using System.ComponentModel.Composition;
using System.Collections.Generic;

namespace MEFEdu
{
    class Program
    {
        static void Main(string[] args)
        {
            // コンテナの初期化
            var catalog = new AssemblyCatalog(
                typeof(Program).Assembly);
            var container = new CompositionContainer(catalog);

            var app = container.GetExportedObject<GreetApp>();
            app.Execute();
        }
    }

    [Export]
    public class GreetApp
    {
        [Import("Greet")]
        public List<Action> GreetActions { get; set; }

        public void Execute()
        {
            // 登録されている挨拶を実行!
            foreach (var action in GreetActions)
            {
                action();
            }
        }
    }
}

GreetAppクラスのGreetActionsに登録するメソッドを定義していきます。Greeterクラスを作成して、そこにメソッドを定義してExport(“Greet”)属性をつけています。

public class Greeter
{
    [Export("Greet")]
    public void HelloWorld()
    {
        Console.WriteLine("Hello world");
    }

    [Export("Greet")]
    public void こんにちは世界()
    {
        Console.WriteLine("こんにちは世界");
    }
}

これで実行すると、複数のアクションが登録されて、実行されるのがわかります。

実行結果

Hello world
こんにちは世界

こういう風にして、アプリケーションを何か作る時に、追加処理したいポイントをDelegateのコレクションのプロパティにImport属性をつけたものにしておくと、簡単に拡張できるようになります!!

素敵だ。

投稿日時 : 2009年7月3日 12:52

Feedback

# PNC Online Login 2012/05/29 6:19 Swadiagaigh

PNC Lender http://www.onlinebankinglogon.com/
On-line Banking is the provider provided by PNC Lender to its buyers and accountholders. As a result of this services, the bank may help you:

Access your PNC Banking accounts any time from the day, from anyplace on earth.
Save on time by performing many banking functions above the web.


Banking Services Supplied by PNC-Bank On the net Banking

The Lender has supplied its customers and accountholders various facilities by way of the online world Banking company. This free-of-cost on-line banking assistance can help account holders:

Keep in contact with their finances by offering them a comprehensive summary in their PNC personalized, company and expenditure accounts.
Look at their per month statements and print and obtain the statements for that time period of around 36 months.
Access their accounts, check out their account balances and critique the latest transactions for accuracy and authenticity.
Transfer cash from 1 account to another in excess of the online. The transfer of capital can be done among two PNC Lender accounts or in between a legitimate PNC-Bank account as well as a valid account at any other money institution.
Get their charges online. This decreases chance of consumers incurring a high-quality due to delay in bills.
Preserve money and time by enabling them to pay for their bills on the net.
Toremaininformed about each and every celebration linked to their accounts and bills as a result of e-mail notifications.


Supplemental Amenities Provided by the PNC-Bank Online Banking Company

By cyberspace Banking services of PNC Bank, accountholders could also:

Adjust their individual info
Buy for checkbook
Make ask for for quit repayments and copies of deposit slips, cleared checks or account statements
Indication in for extra products and services such as Verified by Visa and PNC FYIs & Deals
Locate ATMs or branches of PNC Banks
Explore product info, tools, articles and special offers.

# www.chase.com 2012/05/30 5:46 JalkGlamn

Chase On-line login banking is amongst the greatest on line finance institutions at this time for my part. They provide competitive premiums and seriously do an incredible occupation at buidling yoru bank account. Visit http://pcinternetbanking.com/chase-online-banking/ for the look and you also can read about it for youreslf.

タイトル  
名前  
Url
コメント