PluginServiceBase
using System;
using System.ComponentModel.Composition.Hosting;
using System.ComponentModel.Composition.Primitives;
namespace Relativity.Transfer
{
public abstract class PluginServiceBase : IDisposable
{
private readonly bool disposeCatalog;
private bool disposed;
protected ITransferLog Log { get; }
protected CompositionContainer CompositionContainer { get; set; }
protected ComposablePartCatalog ComposablePartCatalog { get; set; }
protected PluginServiceBase()
: this(new NullTransferLog())
{
}
protected PluginServiceBase(ITransferLog log)
{
if (log == null)
throw new ArgumentNullException("log");
disposeCatalog = true;
Log = log;
}
protected PluginServiceBase(ComposablePartCatalog catalog, ITransferLog log)
{
if (catalog == null)
throw new ArgumentNullException("catalog");
if (log == null)
throw new ArgumentNullException("log");
Log = log;
ComposablePartCatalog = catalog;
disposeCatalog = false;
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected void CleanupResources()
{
if ((object)CompositionContainer != null) {
CompositionContainer.Dispose();
CompositionContainer = null;
}
}
private void Dispose(bool disposing)
{
if (!disposed) {
if (disposing) {
if ((object)ComposablePartCatalog != null && disposeCatalog)
ComposablePartCatalog.Dispose();
ComposablePartCatalog = null;
CleanupResources();
}
disposed = true;
}
}
}
}