かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

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のコンテナの初期化を行います。