diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-10-02 12:20:11 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-10-02 12:20:11 -0400 |
| commit | 76faf89acaad295bddc2dfc5428fa6052931f89d (patch) | |
| tree | f98c3d86956f816cb81f11f3d48f0e61cf172ae4 | |
| parent | 9a4712cf225f9792e516badd42efef86db0accbe (diff) | |
handle type creation errors
| -rw-r--r-- | MediaBrowser.Common.Implementations/BaseApplicationHost.cs | 31 | ||||
| -rw-r--r-- | MediaBrowser.Common/IApplicationHost.cs | 7 |
2 files changed, 27 insertions, 11 deletions
diff --git a/MediaBrowser.Common.Implementations/BaseApplicationHost.cs b/MediaBrowser.Common.Implementations/BaseApplicationHost.cs index fe0abcae0..4c2d5d599 100644 --- a/MediaBrowser.Common.Implementations/BaseApplicationHost.cs +++ b/MediaBrowser.Common.Implementations/BaseApplicationHost.cs @@ -159,7 +159,7 @@ namespace MediaBrowser.Common.Implementations protected IZipClient ZipClient { get; set; } protected IIsoManager IsoManager { get; set; } - + /// <summary> /// Initializes a new instance of the <see cref="BaseApplicationHost{TApplicationPathsType}"/> class. /// </summary> @@ -243,7 +243,7 @@ namespace MediaBrowser.Common.Implementations /// Runs the startup tasks. /// </summary> /// <returns>Task.</returns> - public virtual Task RunStartupTasks() + public virtual Task RunStartupTasks() { return Task.Run(() => { @@ -384,7 +384,7 @@ namespace MediaBrowser.Common.Implementations /// </summary> /// <param name="type">The type.</param> /// <returns>System.Object.</returns> - public object CreateInstance(Type type) + protected object CreateInstance(Type type) { try { @@ -399,6 +399,25 @@ namespace MediaBrowser.Common.Implementations } /// <summary> + /// Creates the instance safe. + /// </summary> + /// <param name="type">The type.</param> + /// <returns>System.Object.</returns> + protected object CreateInstanceSafe(Type type) + { + try + { + return Container.GetInstance(type); + } + catch (Exception ex) + { + Logger.Error("Error creating {0}", ex, type.Name); + + return null; + } + } + + /// <summary> /// Registers the specified obj. /// </summary> /// <typeparam name="T"></typeparam> @@ -496,7 +515,11 @@ namespace MediaBrowser.Common.Implementations /// <returns>IEnumerable{``0}.</returns> public IEnumerable<T> GetExports<T>(bool manageLiftime = true) { - var parts = GetExportTypes<T>().Select(CreateInstance).Cast<T>().ToList(); + var parts = GetExportTypes<T>() + .Select(CreateInstanceSafe) + .Where(i => i != null) + .Cast<T>() + .ToList(); if (manageLiftime) { diff --git a/MediaBrowser.Common/IApplicationHost.cs b/MediaBrowser.Common/IApplicationHost.cs index 7cb58f580..c634871fa 100644 --- a/MediaBrowser.Common/IApplicationHost.cs +++ b/MediaBrowser.Common/IApplicationHost.cs @@ -90,13 +90,6 @@ namespace MediaBrowser.Common Task UpdateApplication(PackageVersionInfo package, CancellationToken cancellationToken, IProgress<double> progress); /// <summary> - /// Creates an instance of type and resolves all constructor dependancies - /// </summary> - /// <param name="type">The type.</param> - /// <returns>System.Object.</returns> - object CreateInstance(Type type); - - /// <summary> /// Resolves this instance. /// </summary> /// <typeparam name="T"></typeparam> |
