かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

Enterprise Library入門 その2 「手順の簡略化」

手順の簡略化

ここでは、ConfigurationSourceBuilderからEnterprise Libraryのコンテナを初期化するためのユーテリティコードを説明します。このコードは、Enterprise Libraryのコンテナの初期化の冗長なコードを簡略化することを目的としています。この後の、各Application Blockの説明では、ここで紹介したコードがあることを前提にサンプルを記載します。ConfigurationSourceBuilderからIServiceLocatorを作成するために下記の拡張メソッドを定義します。

01. namespace EntLib5Sample.Commons
02. {
03.     using Microsoft.Practices.EnterpriseLibrary.Common.Configuration;
04.     using Microsoft.Practices.ServiceLocation;
05. 
06.     public static class ConfigurationSourceBuilderExtensions
07.     {
08.         /// <summary>
09.         /// ConfigurationSourceBuilderの内容を元にIServiceProviderを作成します。
10.         /// </summary>
11.         /// <param name="self"></param>
12.         /// <returns></returns>
13.         public static IServiceLocator CreateContainer(this ConfigurationSourceBuilder self)
14.         {
15.             var configuration = new DictionaryConfigurationSource();
16.             self.UpdateConfigurationWithReplace(configuration);
17.             return EnterpriseLibraryContainer.CreateDefaultContainer(configuration);
18.         }
19.     }
20. }

このユーテリティを使用することで、前回のHello worldのコードは下記のようになります。

01. namespace HelloWorld
02. {
03.     using System.Diagnostics;
04.     using Microsoft.Practices.EnterpriseLibrary.Common.Configuration;
05.     using Microsoft.Practices.EnterpriseLibrary.Logging;
06.     using EntLib5Sample.Commons;
07. 
08.     class Program
09.     {
10.         static void Main(string[] args)
11.         {
12.             // 構成情報を組み立てる
13.             var builder = new ConfigurationSourceBuilder();
14.             builder.ConfigureLogging()
15.                 .SpecialSources
16.                 .AllEventsCategory
17.                     .SendTo
18.                     .FlatFile("FlatFileListener")
19.                     .FormatWith(
20.                         new FormatterBuilder()
21.                             .TextFormatterNamed("TextFormatter")
22.                             .UsingTemplate("{timestamp(local:yyyy/MM/dd HH:mm:ss.fff)}: {message}"))
23.                     .ToFile("output.txt");
24. 
25.             // 組み立てた構成情報からIServiceLocatorを作成
26.             EnterpriseLibraryContainer.Current = builder.CreateContainer();
27. 
28.             // EnterpriseLibraryのコンテナからLogging Application BlockのLog書き込み部品を取得
29.             var logger = EnterpriseLibraryContainer.Current.GetInstance<LogWriter>();
30.             // ログに出力する
31.             logger.Write("Hello world");
32. 
33.             // ログを表示
34.             Process.Start("output.txt");
35.         }
36.     }
37. }

29行目で先ほど定義したメソッドを使用しています。本書では、この方法でEnterprise Libraryのコンテナの初期化を行います。