/// <summary>
        /// <see cref="DirectoryStructure"/> クラスの新しいインスタンスを初期化します。
        /// </summary>
        /// <param name="configuration">設定を取得する <see cref="XmlConfiguration"/> オブジェクト。</param>
        public DirectoryStructure(XmlConfiguration configuration)
        {
            this.BaseDirectory = new DirectoryInfo(AppDomain.CurrentDomain.BaseDirectory);
            Environment.SetEnvironmentVariable(
                "BaseDir",
                this.BaseDirectory.FullName,
                EnvironmentVariableTarget.Process
            );
            Environment.SetEnvironmentVariable(
                "DataDir",
                new DirectoryInfo(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData))
                    .CreateSubdirectory("MetaTweet")
                    .FullName,
                EnvironmentVariableTarget.Process
            );
            this.BinaryDirectory = this.GetDirectory(configuration.ResolveValue<String>("binary"));
            this.PrivilegedBinaryDirectory = this.GetDirectory(configuration.ResolveValue<String>("privbinary"));
            this.CacheDirectory = this.GetDirectory(configuration.ResolveValue<String>("cache"));
            this.ConfigDirectory =this.GetDirectory(configuration.ResolveValue<String>("config"));
            this.LibraryDirectory = this.GetDirectory(configuration.ResolveValue<String>("library"));
            this.LogDirectory = this.GetDirectory(configuration.ResolveValue<String>("log"));
            this.ModuleDirectory = this.GetDirectory(configuration.ResolveValue<String>("module"));
            this.RuntimeDirectory = this.GetDirectory(configuration.ResolveValue<String>("runtime"));
            this.TempDirectory = this.GetDirectory(configuration.ResolveValue<String>("temp"));

            this.BaseDirectoryWatcher = new FileSystemWatcher(this.BaseDirectory.FullName)
            {
                EnableRaisingEvents = true,
                IncludeSubdirectories = true,
            };
            this.BinaryDirectoryWatcher = new FileSystemWatcher(this.BinaryDirectory.FullName)
            {
                EnableRaisingEvents = true,
                IncludeSubdirectories = true,
            };
            this.PrivilegedBinaryDirectoryWatcher = new FileSystemWatcher(this.PrivilegedBinaryDirectory.FullName)
            {
                EnableRaisingEvents = true,
                IncludeSubdirectories = true,
            };
            this.CacheDirectoryWatcher = new FileSystemWatcher(this.CacheDirectory.FullName)
            {
                EnableRaisingEvents = true,
                IncludeSubdirectories = true,
            };
            this.ConfigDirectoryWatcher = new FileSystemWatcher(this.ConfigDirectory.FullName)
            {
                EnableRaisingEvents = true,
                IncludeSubdirectories = true,
            };
            this.LibraryDirectoryWatcher = new FileSystemWatcher(this.LibraryDirectory.FullName)
            {
                EnableRaisingEvents = true,
                IncludeSubdirectories = true,
            };
            this.LogDirectoryWatcher = new FileSystemWatcher(this.LogDirectory.FullName)
            {
                EnableRaisingEvents = true,
                IncludeSubdirectories = true,
            };
            this.ModuleDirectoryWatcher = new FileSystemWatcher(this.ModuleDirectory.FullName)
            {
                EnableRaisingEvents = true,
                IncludeSubdirectories = true,
            };
            this.RuntimeDirectoryWatcher = new FileSystemWatcher(this.RuntimeDirectory.FullName)
            {
                EnableRaisingEvents = true,
                IncludeSubdirectories = true,
            };
            this.TempDirectoryWatcher = new FileSystemWatcher(this.TempDirectory.FullName)
            {
                EnableRaisingEvents = true,
                IncludeSubdirectories = true,
            };
        }