aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Common.Implementations/BaseApplicationHost.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Common.Implementations/BaseApplicationHost.cs')
-rw-r--r--MediaBrowser.Common.Implementations/BaseApplicationHost.cs43
1 files changed, 19 insertions, 24 deletions
diff --git a/MediaBrowser.Common.Implementations/BaseApplicationHost.cs b/MediaBrowser.Common.Implementations/BaseApplicationHost.cs
index c5af5059f..f5855bf75 100644
--- a/MediaBrowser.Common.Implementations/BaseApplicationHost.cs
+++ b/MediaBrowser.Common.Implementations/BaseApplicationHost.cs
@@ -151,21 +151,22 @@ namespace MediaBrowser.Common.Implementations
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="obj">The obj.</param>
- protected void RegisterSingleInstance<T>(T obj)
+ /// <param name="manageLifetime">if set to <c>true</c> [manage lifetime].</param>
+ protected void RegisterSingleInstance<T>(T obj, bool manageLifetime = true)
where T : class
{
Container.RegisterSingle(obj);
- }
- /// <summary>
- /// Registers the specified func.
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="func">The func.</param>
- protected void Register<T>(Func<T> func)
- where T : class
- {
- Container.Register(func);
+ if (manageLifetime)
+ {
+ var disposable = obj as IDisposable;
+
+ if (disposable != null)
+ {
+ Logger.Info("Registering " + disposable.GetType().Name);
+ DisposableParts.Add(disposable);
+ }
+ }
}
/// <summary>
@@ -206,16 +207,6 @@ namespace MediaBrowser.Common.Implementations
}
/// <summary>
- /// Registers the specified service type.
- /// </summary>
- /// <param name="serviceType">Type of the service.</param>
- /// <param name="implementation">Type of the concrete.</param>
- protected void Register(Type serviceType, Type implementation)
- {
- Container.Register(serviceType, implementation);
- }
-
- /// <summary>
/// Loads the assembly.
/// </summary>
/// <param name="file">The file.</param>
@@ -282,13 +273,17 @@ namespace MediaBrowser.Common.Implementations
/// <param name="dispose"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param>
protected virtual void Dispose(bool dispose)
{
- foreach (var part in DisposableParts)
+ var type = GetType();
+
+ Logger.Info("Disposing " + type.Name);
+
+ foreach (var part in DisposableParts.Distinct().Where(i => i.GetType() != type).ToList())
{
+ Logger.Info("Disposing " + part.GetType().Name);
+
part.Dispose();
}
- var b = Container.GetCurrentRegistrations();
-
DisposableParts.Clear();
}
}