手順の簡略化
ここでは、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のコンテナの初期化を行います。