aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2013-10-02 12:20:11 -0400
committerLuke Pulverenti <luke.pulverenti@gmail.com>2013-10-02 12:20:11 -0400
commit76faf89acaad295bddc2dfc5428fa6052931f89d (patch)
treef98c3d86956f816cb81f11f3d48f0e61cf172ae4
parent9a4712cf225f9792e516badd42efef86db0accbe (diff)
handle type creation errors
-rw-r--r--MediaBrowser.Common.Implementations/BaseApplicationHost.cs31
-rw-r--r--MediaBrowser.Common/IApplicationHost.cs7
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>