aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Common/Kernel
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Common/Kernel')
-rw-r--r--MediaBrowser.Common/Kernel/BaseKernel.cs21
-rw-r--r--MediaBrowser.Common/Kernel/IWebSocketListener.cs3
2 files changed, 20 insertions, 4 deletions
diff --git a/MediaBrowser.Common/Kernel/BaseKernel.cs b/MediaBrowser.Common/Kernel/BaseKernel.cs
index 91965e4690..202bd3cab6 100644
--- a/MediaBrowser.Common/Kernel/BaseKernel.cs
+++ b/MediaBrowser.Common/Kernel/BaseKernel.cs
@@ -197,7 +197,6 @@ namespace MediaBrowser.Common.Kernel
/// Gets the web socket listeners.
/// </summary>
/// <value>The web socket listeners.</value>
- [ImportMany(typeof(IWebSocketListener))]
public IEnumerable<IWebSocketListener> WebSocketListeners { get; private set; }
/// <summary>
@@ -237,6 +236,11 @@ namespace MediaBrowser.Common.Kernel
public IEnumerable<IRestfulService> RestServices { get; private set; }
/// <summary>
+ /// The disposable parts
+ /// </summary>
+ private readonly List<IDisposable> _disposableParts = new List<IDisposable>();
+
+ /// <summary>
/// The _protobuf serializer initialized
/// </summary>
private bool _protobufSerializerInitialized;
@@ -497,6 +501,7 @@ namespace MediaBrowser.Common.Kernel
protected virtual void ComposePartsWithIocContainer(Type[] allTypes, Container container)
{
RestServices = GetExports<IRestfulService>(allTypes);
+ WebSocketListeners = GetExports<IWebSocketListener>(allTypes);
}
/// <summary>
@@ -511,7 +516,11 @@ namespace MediaBrowser.Common.Kernel
Logger.Info("Composing instances of " + currentType.Name);
- return allTypes.Where(currentType.IsAssignableFrom).Select(Instantiate).Cast<T>().ToArray();
+ var parts = allTypes.Where(currentType.IsAssignableFrom).Select(Instantiate).Cast<T>().ToArray();
+
+ _disposableParts.AddRange(parts.OfType<IDisposable>());
+
+ return parts;
}
/// <summary>
@@ -528,6 +537,7 @@ namespace MediaBrowser.Common.Kernel
/// Composes the exported values.
/// </summary>
/// <param name="container">The container.</param>
+ /// <param name="iocContainer"></param>
protected virtual void ComposeExportedValues(CompositionContainer container, Container iocContainer)
{
container.ComposeExportedValue("logger", Logger);
@@ -733,6 +743,13 @@ namespace MediaBrowser.Common.Kernel
DisposeHttpManager();
DisposeComposableParts();
+
+ foreach (var part in _disposableParts)
+ {
+ part.Dispose();
+ }
+
+ _disposableParts.Clear();
}
}
diff --git a/MediaBrowser.Common/Kernel/IWebSocketListener.cs b/MediaBrowser.Common/Kernel/IWebSocketListener.cs
index 00be28ed34..b04bb68851 100644
--- a/MediaBrowser.Common/Kernel/IWebSocketListener.cs
+++ b/MediaBrowser.Common/Kernel/IWebSocketListener.cs
@@ -1,5 +1,4 @@
using MediaBrowser.Common.Net;
-using System;
using System.Threading.Tasks;
namespace MediaBrowser.Common.Kernel
@@ -7,7 +6,7 @@ namespace MediaBrowser.Common.Kernel
/// <summary>
///This is an interface for listening to messages coming through a web socket connection
/// </summary>
- public interface IWebSocketListener : IDisposable
+ public interface IWebSocketListener
{
/// <summary>
/// Processes the message.