diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-06-03 14:15:35 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-06-03 14:15:35 -0400 |
| commit | 08d9004d8f361aaf13756cab70fc659e5fbb775c (patch) | |
| tree | 1f96203035f37c4f35d7819edb2f50d15fea80f7 | |
| parent | 59118a2ddbf31973873eef42ef18182300fe9a0c (diff) | |
a little more kernel consolidation
| -rw-r--r-- | MediaBrowser.Api/Images/ImageService.cs | 2 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Drawing/ImageManager.cs | 11 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Dto/DtoBuilder.cs | 2 | ||||
| -rw-r--r-- | MediaBrowser.Controller/IServerApplicationHost.cs | 12 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Kernel.cs | 47 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Localization/LocalizedStrings.cs | 11 | ||||
| -rw-r--r-- | MediaBrowser.Server.Implementations/ServerManager/ServerManager.cs | 15 | ||||
| -rw-r--r-- | MediaBrowser.Server.Implementations/Sqlite/SQLiteRepository.cs | 6 | ||||
| -rw-r--r-- | MediaBrowser.ServerApplication/App.xaml.cs | 7 | ||||
| -rw-r--r-- | MediaBrowser.ServerApplication/ApplicationHost.cs | 67 | ||||
| -rw-r--r-- | MediaBrowser.ServerApplication/EntryPoints/StartupWizard.cs | 8 | ||||
| -rw-r--r-- | MediaBrowser.ServerApplication/MainWindow.xaml.cs | 12 |
12 files changed, 98 insertions, 102 deletions
diff --git a/MediaBrowser.Api/Images/ImageService.cs b/MediaBrowser.Api/Images/ImageService.cs index 4b4aeb83f..68e7d0686 100644 --- a/MediaBrowser.Api/Images/ImageService.cs +++ b/MediaBrowser.Api/Images/ImageService.cs @@ -658,7 +658,7 @@ namespace MediaBrowser.Api.Images // See if we can avoid a file system lookup by looking for the file in ResolveArgs var originalFileImageDateModified = kernel.ImageManager.GetImageDateModified(item, request.Type, index); - var supportedImageEnhancers = kernel.ImageEnhancers.Where(i => + var supportedImageEnhancers = kernel.ImageManager.ImageEnhancers.Where(i => { try { diff --git a/MediaBrowser.Controller/Drawing/ImageManager.cs b/MediaBrowser.Controller/Drawing/ImageManager.cs index 807c2d1e0..b728fe71f 100644 --- a/MediaBrowser.Controller/Drawing/ImageManager.cs +++ b/MediaBrowser.Controller/Drawing/ImageManager.cs @@ -26,6 +26,13 @@ namespace MediaBrowser.Controller.Drawing public class ImageManager { /// <summary> + /// Gets the list of currently registered image processors + /// Image processors are specialized metadata providers that run after the normal ones + /// </summary> + /// <value>The image enhancers.</value> + public IEnumerable<IImageEnhancer> ImageEnhancers { get; set; } + + /// <summary> /// Gets the image size cache. /// </summary> /// <value>The image size cache.</value> @@ -120,7 +127,7 @@ namespace MediaBrowser.Controller.Drawing originalImagePath = await GetCroppedImage(originalImagePath, dateModified).ConfigureAwait(false); } - var supportedEnhancers = _kernel.ImageEnhancers.Where(i => + var supportedEnhancers = ImageEnhancers.Where(i => { try { @@ -621,7 +628,7 @@ namespace MediaBrowser.Controller.Drawing var dateModified = GetImageDateModified(item, imagePath); - var supportedEnhancers = _kernel.ImageEnhancers.Where(i => + var supportedEnhancers = ImageEnhancers.Where(i => { try { diff --git a/MediaBrowser.Controller/Dto/DtoBuilder.cs b/MediaBrowser.Controller/Dto/DtoBuilder.cs index 549248595..412b911f4 100644 --- a/MediaBrowser.Controller/Dto/DtoBuilder.cs +++ b/MediaBrowser.Controller/Dto/DtoBuilder.cs @@ -182,7 +182,7 @@ namespace MediaBrowser.Controller.Dto return; } - var supportedEnhancers = Kernel.Instance.ImageEnhancers.Where(i => + var supportedEnhancers = Kernel.Instance.ImageManager.ImageEnhancers.Where(i => { try { diff --git a/MediaBrowser.Controller/IServerApplicationHost.cs b/MediaBrowser.Controller/IServerApplicationHost.cs index 042ef30ec..f96c2536e 100644 --- a/MediaBrowser.Controller/IServerApplicationHost.cs +++ b/MediaBrowser.Controller/IServerApplicationHost.cs @@ -13,5 +13,17 @@ namespace MediaBrowser.Controller /// </summary> /// <returns>SystemInfo.</returns> SystemInfo GetSystemInfo(); + + /// <summary> + /// Gets the name of the web application. + /// </summary> + /// <value>The name of the web application.</value> + string WebApplicationName { get; } + + /// <summary> + /// Gets the HTTP server URL prefix. + /// </summary> + /// <value>The HTTP server URL prefix.</value> + string HttpServerUrlPrefix { get; } } } diff --git a/MediaBrowser.Controller/Kernel.cs b/MediaBrowser.Controller/Kernel.cs index 3e1c21a50..d7b24a0cc 100644 --- a/MediaBrowser.Controller/Kernel.cs +++ b/MediaBrowser.Controller/Kernel.cs @@ -1,8 +1,5 @@ -using MediaBrowser.Controller.Configuration; -using MediaBrowser.Controller.Drawing; -using MediaBrowser.Controller.Localization; +using MediaBrowser.Controller.Drawing; using MediaBrowser.Controller.MediaInfo; -using MediaBrowser.Controller.Providers; using MediaBrowser.Controller.Weather; using System.Collections.Generic; @@ -32,57 +29,17 @@ namespace MediaBrowser.Controller public FFMpegManager FFMpegManager { get; set; } /// <summary> - /// Gets the name of the web application that can be used for url building. - /// All api urls will be of the form {protocol}://{host}:{port}/{appname}/... - /// </summary> - /// <value>The name of the web application.</value> - public string WebApplicationName - { - get { return "mediabrowser"; } - } - - /// <summary> - /// Gets the HTTP server URL prefix. - /// </summary> - /// <value>The HTTP server URL prefix.</value> - public virtual string HttpServerUrlPrefix - { - get - { - return "http://+:" + _configurationManager.Configuration.HttpServerPortNumber + "/" + WebApplicationName + "/"; - } - } - - /// <summary> - /// Gets the list of Localized string files - /// </summary> - /// <value>The string files.</value> - public IEnumerable<LocalizedStringData> StringFiles { get; set; } - - /// <summary> /// Gets the list of currently registered weather prvoiders /// </summary> /// <value>The weather providers.</value> public IEnumerable<IWeatherProvider> WeatherProviders { get; set; } /// <summary> - /// Gets the list of currently registered image processors - /// Image processors are specialized metadata providers that run after the normal ones - /// </summary> - /// <value>The image enhancers.</value> - public IEnumerable<IImageEnhancer> ImageEnhancers { get; set; } - - private readonly IServerConfigurationManager _configurationManager; - - /// <summary> /// Creates a kernel based on a Data path, which is akin to our current programdata path /// </summary> - /// <param name="configurationManager">The configuration manager.</param> - public Kernel(IServerConfigurationManager configurationManager) + public Kernel() { Instance = this; - - _configurationManager = configurationManager; } } } diff --git a/MediaBrowser.Controller/Localization/LocalizedStrings.cs b/MediaBrowser.Controller/Localization/LocalizedStrings.cs index 31dcb2e9f..bd82d39ea 100644 --- a/MediaBrowser.Controller/Localization/LocalizedStrings.cs +++ b/MediaBrowser.Controller/Localization/LocalizedStrings.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Concurrent; +using System.Collections.Generic; using System.Globalization; using System.IO; using System.Linq; @@ -13,7 +14,13 @@ namespace MediaBrowser.Controller.Localization public class LocalizedStrings { public static IServerApplicationPaths ApplicationPaths; - + + /// <summary> + /// Gets the list of Localized string files + /// </summary> + /// <value>The string files.</value> + public static IEnumerable<LocalizedStringData> StringFiles { get; set; } + /// <summary> /// The base prefix /// </summary> @@ -42,7 +49,7 @@ namespace MediaBrowser.Controller.Localization { _appPaths = appPaths; - foreach (var stringObject in Kernel.Instance.StringFiles) + foreach (var stringObject in StringFiles) { AddStringData(LoadFromFile(GetFileName(stringObject),stringObject.GetType())); } diff --git a/MediaBrowser.Server.Implementations/ServerManager/ServerManager.cs b/MediaBrowser.Server.Implementations/ServerManager/ServerManager.cs index f8e47434e..80b6a0f7d 100644 --- a/MediaBrowser.Server.Implementations/ServerManager/ServerManager.cs +++ b/MediaBrowser.Server.Implementations/ServerManager/ServerManager.cs @@ -59,7 +59,7 @@ namespace MediaBrowser.Server.Implementations.ServerManager /// <summary> /// The _application host /// </summary> - private readonly IApplicationHost _applicationHost; + private readonly IServerApplicationHost _applicationHost; /// <summary> /// Gets or sets the configuration manager. @@ -92,20 +92,14 @@ namespace MediaBrowser.Server.Implementations.ServerManager private readonly List<IWebSocketListener> _webSocketListeners = new List<IWebSocketListener>(); /// <summary> - /// The _kernel - /// </summary> - private readonly Kernel _kernel; - - /// <summary> /// Initializes a new instance of the <see cref="ServerManager" /> class. /// </summary> /// <param name="applicationHost">The application host.</param> /// <param name="jsonSerializer">The json serializer.</param> /// <param name="logger">The logger.</param> /// <param name="configurationManager">The configuration manager.</param> - /// <param name="kernel">The kernel.</param> /// <exception cref="System.ArgumentNullException">applicationHost</exception> - public ServerManager(IApplicationHost applicationHost, IJsonSerializer jsonSerializer, ILogger logger, IServerConfigurationManager configurationManager, Kernel kernel) + public ServerManager(IServerApplicationHost applicationHost, IJsonSerializer jsonSerializer, ILogger logger, IServerConfigurationManager configurationManager) { if (applicationHost == null) { @@ -124,7 +118,6 @@ namespace MediaBrowser.Server.Implementations.ServerManager _jsonSerializer = jsonSerializer; _applicationHost = applicationHost; ConfigurationManager = configurationManager; - _kernel = kernel; ConfigurationManager.ConfigurationUpdated += ConfigurationUpdated; } @@ -161,7 +154,7 @@ namespace MediaBrowser.Server.Implementations.ServerManager private void ReloadHttpServer() { // Only reload if the port has changed, so that we don't disconnect any active users - if (HttpServer != null && HttpServer.UrlPrefix.Equals(_kernel.HttpServerUrlPrefix, StringComparison.OrdinalIgnoreCase)) + if (HttpServer != null && HttpServer.UrlPrefix.Equals(_applicationHost.HttpServerUrlPrefix, StringComparison.OrdinalIgnoreCase)) { return; } @@ -174,7 +167,7 @@ namespace MediaBrowser.Server.Implementations.ServerManager { HttpServer = _applicationHost.Resolve<IHttpServer>(); HttpServer.EnableHttpRequestLogging = ConfigurationManager.Configuration.EnableHttpLevelLogging; - HttpServer.Start(_kernel.HttpServerUrlPrefix); + HttpServer.Start(_applicationHost.HttpServerUrlPrefix); } catch (HttpListenerException ex) { diff --git a/MediaBrowser.Server.Implementations/Sqlite/SQLiteRepository.cs b/MediaBrowser.Server.Implementations/Sqlite/SQLiteRepository.cs index 297033cd6..6cd816e51 100644 --- a/MediaBrowser.Server.Implementations/Sqlite/SQLiteRepository.cs +++ b/MediaBrowser.Server.Implementations/Sqlite/SQLiteRepository.cs @@ -49,7 +49,7 @@ namespace MediaBrowser.Server.Implementations.Sqlite /// <param name="dbPath">The db path.</param> /// <returns>Task{System.Boolean}.</returns> /// <exception cref="System.ArgumentNullException">dbPath</exception> - protected async Task ConnectToDb(string dbPath) + protected Task ConnectToDb(string dbPath) { if (string.IsNullOrEmpty(dbPath)) { @@ -68,7 +68,7 @@ namespace MediaBrowser.Server.Implementations.Sqlite Connection = new SQLiteConnection(connectionstr.ConnectionString); - await Connection.OpenAsync().ConfigureAwait(false); + return Connection.OpenAsync(); } /// <summary> @@ -164,7 +164,7 @@ namespace MediaBrowser.Server.Implementations.Sqlite { throw new ArgumentNullException("reader"); } - + var memoryStream = new MemoryStream(); var num = 0L; var array = new byte[4096]; diff --git a/MediaBrowser.ServerApplication/App.xaml.cs b/MediaBrowser.ServerApplication/App.xaml.cs index 5a1d7505c..260081416 100644 --- a/MediaBrowser.ServerApplication/App.xaml.cs +++ b/MediaBrowser.ServerApplication/App.xaml.cs @@ -226,10 +226,13 @@ namespace MediaBrowser.ServerApplication /// Opens the dashboard page. /// </summary> /// <param name="page">The page.</param> - public static void OpenDashboardPage(string page, User loggedInUser, IServerConfigurationManager configurationManager) + /// <param name="loggedInUser">The logged in user.</param> + /// <param name="configurationManager">The configuration manager.</param> + /// <param name="appHost">The app host.</param> + public static void OpenDashboardPage(string page, User loggedInUser, IServerConfigurationManager configurationManager, IServerApplicationHost appHost) { var url = "http://localhost:" + configurationManager.Configuration.HttpServerPortNumber + "/" + - Kernel.Instance.WebApplicationName + "/dashboard/" + page; + appHost.WebApplicationName + "/dashboard/" + page; OpenUrl(url); } diff --git a/MediaBrowser.ServerApplication/ApplicationHost.cs b/MediaBrowser.ServerApplication/ApplicationHost.cs index 17ee2d597..9e9ab7ff3 100644 --- a/MediaBrowser.ServerApplication/ApplicationHost.cs +++ b/MediaBrowser.ServerApplication/ApplicationHost.cs @@ -40,7 +40,6 @@ using MediaBrowser.Server.Implementations.Providers; using MediaBrowser.Server.Implementations.ServerManager; using MediaBrowser.Server.Implementations.Session; using MediaBrowser.Server.Implementations.Sqlite; -using MediaBrowser.Server.Implementations.Udp; using MediaBrowser.Server.Implementations.Updates; using MediaBrowser.Server.Implementations.WebSocket; using MediaBrowser.ServerApplication.Implementations; @@ -50,7 +49,6 @@ using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; -using System.Net.Sockets; using System.Reflection; using System.Threading; using System.Threading.Tasks; @@ -89,6 +87,28 @@ namespace MediaBrowser.ServerApplication } /// <summary> + /// Gets the name of the web application that can be used for url building. + /// All api urls will be of the form {protocol}://{host}:{port}/{appname}/... + /// </summary> + /// <value>The name of the web application.</value> + public string WebApplicationName + { + get { return "mediabrowser"; } + } + + /// <summary> + /// Gets the HTTP server URL prefix. + /// </summary> + /// <value>The HTTP server URL prefix.</value> + public string HttpServerUrlPrefix + { + get + { + return "http://+:" + ServerConfigurationManager.Configuration.HttpServerPortNumber + "/" + WebApplicationName + "/"; + } + } + + /// <summary> /// Gets the configuration manager. /// </summary> /// <returns>IConfigurationManager.</returns> @@ -200,7 +220,7 @@ namespace MediaBrowser.ServerApplication /// <returns>Task.</returns> protected override async Task RegisterResources() { - ServerKernel = new Kernel(ServerConfigurationManager); + ServerKernel = new Kernel(); await base.RegisterResources().ConfigureAwait(false); @@ -261,7 +281,7 @@ namespace MediaBrowser.ServerApplication HttpServer = await _httpServerCreationTask.ConfigureAwait(false); RegisterSingleInstance(HttpServer, false); - ServerManager = new ServerManager(this, JsonSerializer, Logger, ServerConfigurationManager, ServerKernel); + ServerManager = new ServerManager(this, JsonSerializer, Logger, ServerConfigurationManager); RegisterSingleInstance(ServerManager); var displayPreferencesTask = Task.Run(async () => await ConfigureDisplayPreferencesRepositories().ConfigureAwait(false)); @@ -279,14 +299,15 @@ namespace MediaBrowser.ServerApplication /// </summary> private void SetKernelProperties() { + ServerKernel.ImageManager = new ImageManager(ServerKernel, LogManager.GetLogger("ImageManager"), + ApplicationPaths); Parallel.Invoke( - () => ServerKernel.FFMpegManager = new FFMpegManager(ApplicationPaths, MediaEncoder, LibraryManager, Logger), - () => ServerKernel.ImageManager = new ImageManager(ServerKernel, LogManager.GetLogger("ImageManager"), ApplicationPaths), - () => ServerKernel.WeatherProviders = GetExports<IWeatherProvider>(), - () => ServerKernel.ImageEnhancers = GetExports<IImageEnhancer>().OrderBy(e => e.Priority).ToArray(), - () => ServerKernel.StringFiles = GetExports<LocalizedStringData>(), - SetStaticProperties - ); + () => ServerKernel.FFMpegManager = new FFMpegManager(ApplicationPaths, MediaEncoder, LibraryManager, Logger), + () => ServerKernel.WeatherProviders = GetExports<IWeatherProvider>(), + () => ServerKernel.ImageManager.ImageEnhancers = GetExports<IImageEnhancer>().OrderBy(e => e.Priority).ToArray(), + () => LocalizedStrings.StringFiles = GetExports<LocalizedStringData>(), + SetStaticProperties + ); } /// <summary> @@ -364,20 +385,16 @@ namespace MediaBrowser.ServerApplication ServerManager.AddWebSocketListeners(GetExports<IWebSocketListener>(false)); StartServer(true); - - Parallel.Invoke( - - () => LibraryManager.AddParts(GetExports<IResolverIgnoreRule>(), - GetExports<IVirtualFolderCreator>(), - GetExports<IItemResolver>(), - GetExports<IIntroProvider>(), - GetExports<IBaseItemComparer>(), - GetExports<ILibraryPrescanTask>(), - GetExports<ILibraryPostScanTask>()), - () => ProviderManager.AddMetadataProviders(GetExports<BaseMetadataProvider>().ToArray()) + LibraryManager.AddParts(GetExports<IResolverIgnoreRule>(), + GetExports<IVirtualFolderCreator>(), + GetExports<IItemResolver>(), + GetExports<IIntroProvider>(), + GetExports<IBaseItemComparer>(), + GetExports<ILibraryPrescanTask>(), + GetExports<ILibraryPostScanTask>()); - ); + ProviderManager.AddMetadataProviders(GetExports<BaseMetadataProvider>().ToArray()); } /// <summary> @@ -414,7 +431,7 @@ namespace MediaBrowser.ServerApplication { base.OnConfigurationUpdated(sender, e); - if (!string.Equals(HttpServer.UrlPrefix, ServerKernel.HttpServerUrlPrefix, StringComparison.OrdinalIgnoreCase)) + if (!string.Equals(HttpServer.UrlPrefix, HttpServerUrlPrefix, StringComparison.OrdinalIgnoreCase)) { NotifyPendingRestart(); } @@ -553,7 +570,7 @@ namespace MediaBrowser.ServerApplication FileName = tmpFile, Arguments = string.Format("{0} {1} {2} {3}", ServerConfigurationManager.Configuration.HttpServerPortNumber, - ServerKernel.HttpServerUrlPrefix, + HttpServerUrlPrefix, UdpServerPort, ServerConfigurationManager.Configuration.LegacyWebSocketPortNumber), diff --git a/MediaBrowser.ServerApplication/EntryPoints/StartupWizard.cs b/MediaBrowser.ServerApplication/EntryPoints/StartupWizard.cs index 22ec16b02..cbdd92c71 100644 --- a/MediaBrowser.ServerApplication/EntryPoints/StartupWizard.cs +++ b/MediaBrowser.ServerApplication/EntryPoints/StartupWizard.cs @@ -1,4 +1,4 @@ -using MediaBrowser.Common; +using MediaBrowser.Controller; using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Plugins; @@ -17,7 +17,7 @@ namespace MediaBrowser.ServerApplication.EntryPoints /// <summary> /// The _app host /// </summary> - private readonly IApplicationHost _appHost; + private readonly IServerApplicationHost _appHost; /// <summary> /// The _user manager /// </summary> @@ -31,7 +31,7 @@ namespace MediaBrowser.ServerApplication.EntryPoints /// </summary> /// <param name="appHost">The app host.</param> /// <param name="userManager">The user manager.</param> - public StartupWizard(IApplicationHost appHost, IUserManager userManager, IServerConfigurationManager configurationManager) + public StartupWizard(IServerApplicationHost appHost, IUserManager userManager, IServerConfigurationManager configurationManager) { _appHost = appHost; _userManager = userManager; @@ -58,7 +58,7 @@ namespace MediaBrowser.ServerApplication.EntryPoints try { - App.OpenDashboardPage("wizardStart.html", user, _configurationManager); + App.OpenDashboardPage("wizardStart.html", user, _configurationManager, _appHost); } catch (Win32Exception ex) { diff --git a/MediaBrowser.ServerApplication/MainWindow.xaml.cs b/MediaBrowser.ServerApplication/MainWindow.xaml.cs index 0c9307394..f23016d7b 100644 --- a/MediaBrowser.ServerApplication/MainWindow.xaml.cs +++ b/MediaBrowser.ServerApplication/MainWindow.xaml.cs @@ -29,7 +29,7 @@ namespace MediaBrowser.ServerApplication /// <summary> /// The _app host /// </summary> - private readonly IApplicationHost _appHost; + private readonly IServerApplicationHost _appHost; /// <summary> /// The _log manager @@ -57,7 +57,7 @@ namespace MediaBrowser.ServerApplication /// <param name="jsonSerializer">The json serializer.</param> /// <param name="displayPreferencesManager">The display preferences manager.</param> /// <exception cref="System.ArgumentNullException">logger</exception> - public MainWindow(ILogManager logManager, IApplicationHost appHost, IServerConfigurationManager configurationManager, IUserManager userManager, ILibraryManager libraryManager, IJsonSerializer jsonSerializer, IDisplayPreferencesManager displayPreferencesManager) + public MainWindow(ILogManager logManager, IServerApplicationHost appHost, IServerConfigurationManager configurationManager, IUserManager userManager, ILibraryManager libraryManager, IJsonSerializer jsonSerializer, IDisplayPreferencesManager displayPreferencesManager) { if (logManager == null) { @@ -189,13 +189,13 @@ namespace MediaBrowser.ServerApplication void cmdApiDocs_Click(object sender, EventArgs e) { App.OpenUrl("http://localhost:" + _configurationManager.Configuration.HttpServerPortNumber + "/" + - Kernel.Instance.WebApplicationName + "/metadata"); + _appHost.WebApplicationName + "/metadata"); } void cmdSwaggerApiDocs_Click(object sender, EventArgs e) { App.OpenUrl("http://localhost:" + _configurationManager.Configuration.HttpServerPortNumber + "/" + - Kernel.Instance.WebApplicationName + "/swagger-ui/index.html"); + _appHost.WebApplicationName + "/swagger-ui/index.html"); } void cmdGithubWiki_Click(object sender, EventArgs e) @@ -254,7 +254,7 @@ namespace MediaBrowser.ServerApplication /// </summary> private void OpenDashboard(User loggedInUser) { - App.OpenDashboardPage("dashboard.html", loggedInUser, _configurationManager); + App.OpenDashboardPage("dashboard.html", loggedInUser, _configurationManager, _appHost); } /// <summary> @@ -275,7 +275,7 @@ namespace MediaBrowser.ServerApplication private void cmdBrowseLibrary_click(object sender, RoutedEventArgs e) { var user = _userManager.Users.FirstOrDefault(u => u.Configuration.IsAdministrator); - App.OpenDashboardPage("index.html", user, _configurationManager); + App.OpenDashboardPage("index.html", user, _configurationManager, _appHost); } /// <summary> |
