ServiceFactory
class ServiceFactory : IServiceFactory, IRelativityServiceFactory, IWebApiServiceFactory, IInstanceSettingsConfigurationServiceFactory
using Relativity.Transfer.InstanceSettings;
using Relativity.Transfer.InstanceSettings.Configuration;
using Relativity.Transfer.Kepler;
using Relativity.Transfer.Validator;
using Relativity.Transfer.WebApi;
using System;
namespace Relativity.Transfer
{
internal class ServiceFactory : IServiceFactory, IRelativityServiceFactory, IWebApiServiceFactory, IInstanceSettingsConfigurationServiceFactory
{
private readonly IPathValidationProvider pathValidationProvider;
protected ITransferLog TransferLog { get; }
protected ClientConfiguration Configuration { get; }
protected IToggle UseLegacyWebApiToggle { get; }
public RelativityConnectionInfo ConnectionInfo { get; }
public int MaxRetryAttempts { get; set; }
public double TimeoutSeconds { get; set; }
public IPathValidationProvider PathValidationProvider => pathValidationProvider ?? new PathValidationProvider();
public ServiceFactory(RelativityConnectionInfo connectionInfo, ClientConfiguration configuration, ITransferLog log)
: this(connectionInfo, configuration, log, new PathValidationProvider())
{
}
public ServiceFactory(RelativityConnectionInfo connectionInfo, ClientConfiguration configuration, ITransferLog log, IPathValidationProvider pathValidationProvider)
{
if (connectionInfo == null)
throw new ArgumentNullException("connectionInfo");
if (configuration == null)
throw new ArgumentNullException("configuration");
if (log == null)
throw new ArgumentNullException("log");
ConnectionInfo = connectionInfo;
UseLegacyWebApiToggle = new UseLegacyWebApiToggle(configuration, log);
TransferLog = log;
MaxRetryAttempts = configuration.MaxHttpRetryAttempts;
TimeoutSeconds = configuration.HttpTimeoutSeconds;
Configuration = configuration;
if (TimeoutSeconds <= 0)
TimeoutSeconds = 300;
this.pathValidationProvider = pathValidationProvider;
}
public ICredentialService CreateCredentialService()
{
return new CredentialServiceWithCache(new CredentialService(ConnectionInfo, Configuration, TransferLog), new MemoryCacheProvider());
}
public IApmMetricsService CreateApmMetricsService()
{
return new ApmMetricsService(ConnectionInfo, Configuration, TransferLog);
}
public IInstanceDetailsService CreateInstanceDetailsService()
{
return new InstanceDetailsService(ConnectionInfo, Configuration, TransferLog);
}
public ITargetRateValidator CreateTargetRateValidator()
{
return new TargetRateValidator(CreateInstanceSettingsConfigurationService(), TransferLog);
}
public ITargetRateThrottler CreateTargetRateThrottler()
{
return new TargetRateThrottler(CreateInstanceSettingsConfigurationService(), TransferLog);
}
public IRelativityManagerService CreateRelativityManagerService(IUserManagerService service)
{
return DoCreateRelativityManagerService(service, Configuration);
}
public IRelativityManagerService CreateRelativityManagerService(IUserManagerService service, ClientConfiguration configuration)
{
return DoCreateRelativityManagerService(service, configuration);
}
public IResourcePoolService CreateResourcePoolService()
{
return new ResourcePoolService(ConnectionInfo, TransferLog, MaxRetryAttempts, TimeoutSeconds);
}
public IResourceServerService CreateResourceServerService()
{
return new ResourceServerService(ConnectionInfo, Configuration, TransferLog);
}
public IUserManagerService CreateUserManagerService()
{
return DoCreateUserManagerService(Configuration);
}
public IUserManagerService CreateUserManagerService(ClientConfiguration configuration)
{
return DoCreateUserManagerService(configuration);
}
public IWorkspaceService CreateWorkspaceService()
{
return new WorkspaceService(ConnectionInfo, Configuration, TransferLog);
}
public IFileShareService (int fileShareId)
{
return new FileShareService(ConnectionInfo, Configuration, fileShareId, TransferLog, true);
}
public IInstanceSettingService CreateInstanceSettingService()
{
return new InstanceSettingService(new InstanceSettingsLegacyKeplerRetriever(ConnectionInfo, TransferLog), ConnectionInfo, TransferLog);
}
public IInstanceSettingsConfigurationService CreateInstanceSettingsConfigurationService()
{
WebApiInstanceSettingsRetriever webApiInstanceSettingRetriever = new WebApiInstanceSettingsRetriever(this, ConnectionInfo, TransferLog);
InstanceSettingsConfigurationWebApiRetriever webApiConfigurationRetriever = new InstanceSettingsConfigurationWebApiRetriever(TransferLog, webApiInstanceSettingRetriever);
RestClient restClient = new RestClient(new HttpConnectionInfo(ConnectionInfo), TransferLog, TimeoutSeconds, 1);
InstanceSettingsConfigurationKeplerRetriever keplerConfigurationRetriever = new InstanceSettingsConfigurationKeplerRetriever(TransferLog, ConnectionInfo, restClient);
return new InstanceSettingsConfigurationServiceWithCache(new InstanceSettingsConfigurationService(TransferLog, UseLegacyWebApiToggle, webApiConfigurationRetriever, keplerConfigurationRetriever), new MemoryCacheProvider(), ConnectionInfo);
}
public IUserManagerService CreateUserManagerWebApiService(ClientConfiguration configuration)
{
configuration.UseLegacyWebApi = true;
return new UserManagerWebApiService(ConnectionInfo, configuration, TransferLog);
}
public IRelativityManagerService CreateRelativityManagerWebApiService(IUserManagerService service, ClientConfiguration configuration)
{
configuration.UseLegacyWebApi = true;
return new RelativityManagerWebApiService(ConnectionInfo, configuration, service, TransferLog);
}
private IRelativityManagerService DoCreateRelativityManagerService(IUserManagerService service, ClientConfiguration configuration)
{
if (!UseLegacyWebApiToggle.Value)
return new RelativityManagerKeplerService(ConnectionInfo, configuration, TransferLog);
return CreateRelativityManagerWebApiService(service, configuration);
}
private IUserManagerService DoCreateUserManagerService(ClientConfiguration configuration)
{
if (!UseLegacyWebApiToggle.Value)
return new UserManagerKeplerService();
return CreateUserManagerWebApiService(configuration);
}
}
}