TransferClientPluginService
using System;
using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.ComponentModel.Composition.Hosting;
using System.ComponentModel.Composition.Primitives;
using System.Linq;
using System.Reflection;
namespace Relativity.Transfer
{
internal class TransferClientPluginService : PluginServiceBase
{
[ImportMany(typeof(ITransferClient))]
private IList<Lazy<ITransferClient, ITransferClientMetadata>> Clients { get; set; }
[ImportMany(typeof(IConfigurationDetail))]
private IList<IConfigurationDetail> ConfigurationDetails { get; set; }
public TransferClientPluginService(ITransferLog log)
: base(log)
{
Clients = new List<Lazy<ITransferClient, ITransferClientMetadata>>();
ConfigurationDetails = new List<IConfigurationDetail>();
}
public TransferClientPluginService(ComposablePartCatalog catalog, ITransferLog log)
: base(catalog, log)
{
Clients = new List<Lazy<ITransferClient, ITransferClientMetadata>>();
ConfigurationDetails = new List<IConfigurationDetail>();
}
public IEnumerable<Lazy<ITransferClient, ITransferClientMetadata>> Search(RelativityConnectionInfo connectionInfo, ClientConfiguration configuration)
{
Clients.Clear();
CleanupResources();
if ((object)base.ComposablePartCatalog == null) {
Assembly callingAssembly = Assembly.GetCallingAssembly();
base.ComposablePartCatalog = new AssemblyCatalog(callingAssembly);
}
base.CompositionContainer = new CompositionContainer(base.ComposablePartCatalog, Array.Empty<ExportProvider>());
AttributedModelServices.ComposeExportedValue<ITransferLog>(base.CompositionContainer, "Logger", base.Log);
AttributedModelServices.ComposeExportedValue<RelativityConnectionInfo>(base.CompositionContainer, "RelativityConnectionInfo", connectionInfo);
AttributedModelServices.ComposeExportedValue<ClientConfiguration>(base.CompositionContainer, "ClientConfiguration", configuration);
AttributedModelServices.ComposeParts(base.CompositionContainer, new object[1] {
this
});
return new List<Lazy<ITransferClient, ITransferClientMetadata>>(Clients);
}
public IEnumerable<IConfigurationDetail> SearchConfigurationDetails()
{
ConfigurationDetails.Clear();
CleanupResources();
if ((object)base.ComposablePartCatalog == null) {
Assembly callingAssembly = Assembly.GetCallingAssembly();
base.ComposablePartCatalog = new AssemblyCatalog(callingAssembly);
}
base.CompositionContainer = new CompositionContainer(base.ComposablePartCatalog, Array.Empty<ExportProvider>());
AttributedModelServices.ComposeParts(base.CompositionContainer, new object[1] {
this
});
return new List<IConfigurationDetail>(ConfigurationDetails);
}
public IEnumerable<ITransferClientMetadata> SearchMetadata()
{
return (from x in Search(new RelativityConnectionInfo(), new ClientConfiguration())
select x.Metadata).ToList();
}
}
}