特集
Enterprise Library 4.0概説

新しいオブジェクト生成機構でEntLibはこう変わる!

アバナード株式会社 市川 龍太(Microsoft MVP 2008 for XML)
2008/06/17
Page1 Page2 Page3

EntLibとUnityの統合による新しいオブジェクト生成アーキテクチャ

 従来のEntLibでは、各Application Blockのオブジェクト(例えばDatabaseやCacheManager)を生成する場合は、ファクトリ・クラスを使っていた。

 確かにファクトリ・クラスを使用することで、オブジェクトの生成を隠ぺいできるが、各Application Blockごとに固有のファクトリ・クラスを用意する必要があり、これらファクトリ・クラスの使用方法や実装などが統一されていなかった。しかし今回追加されたUnityを使用することで、統一された方法でオブジェクトを生成できるようになったのである。

Enterprise Library概説:Windowsアプリケーションに高機能なキャッシュ機能を実装しよう

 以下にCaching Application Block(以下CachingAB)を使用する場合を例にしたサンプル・プログラムを示す。

using Microsoft.Practices.Unity;
using Microsoft.Practices.EnterpriseLibrary.Caching;
using Microsoft.Practices.EnterpriseLibrary.Caching.Configuration.Unity;
using Microsoft.Practices.EnterpriseLibrary.Common.Configuration.Unity;

namespace EntLib4Study
{
  class
Program
  {
    static void Main(string[] args)
    {
      IUnityContainer myContainer = new UnityContainer();
      myContainer.AddNewExtension<EnterpriseLibraryCoreExtension>();
      myContainer.AddNewExtension<CachingBlockExtension>();
      ICacheManager cacheManager = myContainer.Resolve<ICacheManager>();

      Console.ReadLine();
    }
  }
CachingABを使用する場合のサンプル・プログラム
以下のアセンブリを参照に追加する
 Microsoft.Practices.Unity.dll
 Microsoft.Practices.EnterpriseLibrary.Caching.dll
 Microsoft.Practices.EnterpriseLibrary.Common.dll

 ここではジェネリック・メソッドであるAddNewExtensionメソッドにExtensionクラスの派生クラスであるEnterpriseLibraryCoreExtensionクラスやCachingBlockExtensionクラスを設定している。このExtensionクラスというのは、先に述べたUnityのオブジェクト生成パイプラインにカスタムの処理を追加させるための拡張機能であり、EntLib 4.0はこの拡張機能を利用しているのである。

 CachingBlockExtensionクラスはCachingAB用のExtensionクラスだが、各Application Blockにはそれぞれ固有のExtensionクラスが用意されている。なお、EnterpriseLibraryCoreExtensionクラスは、すべてのApplication Blockで共通して使用するExtensionクラスであり、必ず追加する必要があるので覚えておいてほしい。

EntLib提供オブジェクトの注入

 次にカスタム・クラスにログ出力オブジェクトを注入する方法について解説する。

Enterprise Library概説:拡張性と使いやすさを併せ持つログ出力機能を実装しよう

 まずConfigurationコンソールを使ってLogging Application Blockの各設定を行う。ここではイベント・ログに出力する設定にしておく。

 次に以下のサンプル・プログラムを実行するとイベント・ログにメッセージが出力される。ログ出力オブジェクトが注入されるカスタム・クラスとしてCustomObjectクラスを記述している。

using Microsoft.Practices.Unity;
using Microsoft.Practices.EnterpriseLibrary.Common.Configuration.Unity;
using Microsoft.Practices.EnterpriseLibrary.Logging;
using Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.Unity;

namespace EntLib4Study
{
  class Program
  {
    static void Main(string[] args)
    {
      IUnityContainer myContainer = new UnityContainer();
      myContainer.AddNewExtension<EnterpriseLibraryCoreExtension>();
      myContainer.AddNewExtension<LoggingBlockExtension>();
      CustomObject myCustomObject = myContainer.Resolve<CustomObject>();

      Console.ReadLine();
    }
  }
  public class CustomObject
  {
    public CustomObject(LogWriter logWriter)
    {
      LogEntry entry = new LogEntry();
      entry.Message = "Hello EntLib 4.0";
      logWriter.Write(entry);
    }
  }
}
LogWriterオブジェクトを注入するサンプル・プログラム
以下のアセンブリを参照に追加する
 Microsoft.Practices.Unity.dll
 Microsoft.Practices.EnterpriseLibrary.Logging.dll
 Microsoft.Practices.EnterpriseLibrary.Common.dll

 このサンプル・プログラムを実行すると、カスタム・クラスであるCustomObjectクラスのコンストラクタのlogWriterパラメータに、Configurationコンソールで設定されたLogWriterオブジェクト(ここではイベント・ログへ出力するためのオブジェクト)が渡されるのである。

 このようにEntLib 4.0が提供する各Application Blockのオブジェクトを外部から注入できるため、アプリケーション・アーキテクチャを柔軟に設計・実装できるのである。

 最後にEntLib 4.0が提供するExtensionクラスの一覧を下の表に示す。

Application Block Extensionクラス名
CachingAB CachingBlockExtension
Data AccessAB DataAccessBlockExtension
LoggingAB LoggingBlockExtension
CryptographyAB CryptographyBlockExtension
SecurityAB SecurityBlockExtension
Excepition HandlingAB ExceptionHandlingBlockExtension
- EnterpriseLibraryBlockExtension
- EnterpriseLibraryCoreExtension
EntLib 4.0が提供しているカスタムExtensionクラス一覧
・Application BlockはABと略称
・EnterpriseLibraryBlockExtensionは各Extensionクラスの基底クラス

 本稿ではEntLib 4.0の概要について解説を行った。

 実は、2008年3月にリリースされたEntLib 4.0 CTP版ではUnityは一切組み込まれていなかった。しかもUnityは2008年4月中旬になってようやくリリースされたのだが、EntLib 4.0はUnityの正規リリース後、わずか半月ほどでUnityを統合したEntLib 4.0がリリースされている。本稿で説明したとおり、UnityはEntLib 4.0の中核に位置しており、コードの修正は少なからずあったものと推察されるが、これほどまでの短期間でリリースできたのはEntLib開発チームがテスト駆動、イテレーションなどのアジャイル開発を実践し、大きな変更でも柔軟かつ迅速に対応できる体制を一貫して敷いているからにほかならない。

 このようにpatterns & practicesチームは開発自体も常に先進的かつ挑戦的であり、こういった姿勢がEntLibにも良い効果をもたらしているのだろう。End of Article

 

 INDEX
  特集:Enterprise Library 4.0概説
  新しいオブジェクト生成機構でEntLibはこう変わる!
    1.EntLib 3.0とEntLib 4.0の相違点
    2.Unity Application Block(1)
  3.Unity Application Block(2)

インデックス・ページヘ  「Enterprise Library 4.0概説」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間