ASP.NET MVC 3でMEFを使う

MefContrib.MVC3を使うと簡単にASP.NET MVCからMEFを使えるのでご紹介。

前提:NuGetがインストール済みなこと。

まず、ASP.NET MVC3のプロジェクトの用意しましょう。

ASP.NET MVC3を選択。

面倒なのでデフォルト実装ありで。

では、MEFを使えるようにしましょう。NuGetがインストールされていると「Add Library Package Reference...」メニューが選べます。

MefContrib.MVC3を選択してインストールします。

すると、必要なライブラリがダウンロードされ、参照が追加されます。また、ASP.NET MVCからMEFを使うためのおまじないコードもプロジェクトに追加されます。

興味があるなら、AppStart_MefContribMVC3.csを覗いてみてください。

これで、MEFが使えるようになりました。では、実際に使ってみましょう。

とりあえず、「Logics」ディレクトリにインタフェースを、「Logics.Impl」にその実装クラスを置くことにします。もちろん、どこでもいいです。

インタフェースはお馴染みの、これ。

namespace TestMvcApplication.Logics
{
    public interface IGreeting
    {
        string Say(string msg);
    }
}

んで、テキトーな実装。

using System;
using System.ComponentModel.Composition;

namespace TestMvcApplication.Logics.Impl
{
    [Export(typeof(IGreeting))]
    public class GreetingImpl : IGreeting
    {
        public string Say(string msg)
        {
            return String.Format("Say 「{0}」", msg);
        }
    }
}

MEFを使ってIGreetingをエクスポートしています。

では、これをHomeControllerから使ってみましょう。

using System.ComponentModel.Composition;
using System.Web.Mvc;
using TestMvcApplication.Logics;

namespace TestMvcApplication.Controllers
{
    public class HomeController : Controller
    {
        [Import]
        public IGreeting Greeting { get; set; }

        public ActionResult Index()
        {
            ViewBag.Message = Greeting.Say("ASP.NET MVC へようこそ");

            return View();
        }

        public ActionResult About()
        {
            return View();
        }
    }
}

IGreetingをインポートして呼び出すだけ。

MefContrib.MVC3を使うと、そこそこ簡単にMEFが利用できますね。