diff options
Diffstat (limited to 'MediaBrowser.Common/Kernel/BaseKernel.cs')
| -rw-r--r-- | MediaBrowser.Common/Kernel/BaseKernel.cs | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/MediaBrowser.Common/Kernel/BaseKernel.cs b/MediaBrowser.Common/Kernel/BaseKernel.cs index 91965e469..202bd3cab 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(); } } |
