/// <summary> /// Initializes a new instance of the <see cref="FeatCommandHandler"/> class. /// </summary> /// <param name="featureInfoProvider">Provider for feature information.</param> /// <param name="commandHandlerProvider">The FTP command handler provider.</param> public FeatCommandHandler( IFeatureInfoProvider featureInfoProvider, IFtpCommandHandlerProvider commandHandlerProvider) { _featureInfoProvider = featureInfoProvider; _commandHandlerProvider = commandHandlerProvider; }
/// <summary> /// Initializes a new instance of the <see cref="ServiceFtpCommandHandlerExtensionScanner"/> class. /// </summary> /// <param name="commandHandlerProvider">The FTP command handler provider.</param> /// <param name="commandHandlerExtensions">The FTP command handler extensions.</param> /// <param name="logger">The logger.</param> public ServiceFtpCommandHandlerExtensionScanner( [NotNull] IFtpCommandHandlerProvider commandHandlerProvider, [NotNull, ItemNotNull] IEnumerable <IFtpCommandHandlerExtension> commandHandlerExtensions, [CanBeNull] ILogger <ServiceFtpCommandHandlerScanner> logger = null) { _extensionInformation = CreateInformation(commandHandlerProvider, commandHandlerExtensions, logger).ToList(); }
private static IEnumerable <IFtpCommandHandlerExtensionInstanceInformation> CreateInformation( IFtpCommandHandlerProvider commandHandlerProvider, IEnumerable <IFtpCommandHandlerExtension> commandHandlerExtensions, ILogger?logger = null) { var cmdHandlers = commandHandlerProvider.CommandHandlers.ToList(); var commandHandlers = cmdHandlers.ToDictionary(x => x.Name, StringComparer.OrdinalIgnoreCase); var commandHandlersByType = cmdHandlers.ToLookup(x => x.Type); foreach (var handlerExtension in commandHandlerExtensions) { if (!commandHandlers.TryGetValue(handlerExtension.ExtensionFor, out var commandHandlerInformation)) { logger?.LogWarning("No command handler found for ID {commandId}.", handlerExtension.ExtensionFor); continue; } var matchingCommandHandlers = commandHandlersByType[commandHandlerInformation.Type]; foreach (var matchingCommandHandler in matchingCommandHandlers) { foreach (var extensionInformation in handlerExtension.GetInformation(matchingCommandHandler)) { yield return(extensionInformation); } } } }
/// <summary> /// Initializes a new instance of the <see cref="FeatCommandHandler"/> class. /// </summary> /// <param name="featureInfoProvider">Provider for feature information.</param> /// <param name="commandHandlerProvider">The FTP command handler provider.</param> public FeatCommandHandler( [NotNull] IFeatureInfoProvider featureInfoProvider, [NotNull] IFtpCommandHandlerProvider commandHandlerProvider) { _featureInfoProvider = featureInfoProvider; _commandHandlerProvider = commandHandlerProvider; }
/// <summary> /// Initializes a new instance of the <see cref="DefaultFeatureInfoProvider"/> class. /// </summary> /// <param name="commandHandlerProvider">Provider for the FTP command handlers.</param> /// <param name="extensionProvider">Provider for the FTP command handler extensions.</param> /// <param name="hostSelector">The FTP host selector.</param> public DefaultFeatureInfoProvider( IFtpCommandHandlerProvider commandHandlerProvider, IFtpCommandHandlerExtensionProvider extensionProvider, IFtpHostSelector hostSelector) { _commandHandlerProvider = commandHandlerProvider; _extensionProvider = extensionProvider; _hostSelector = hostSelector; }
/// <summary> /// Initializes a new instance of the <see cref="AssemblyFtpCommandHandlerExtensionScanner"/> class. /// </summary> /// <param name="commandHandlerProvider">The provider for the FTP commands.</param> /// <param name="logger">The logger.</param> /// <param name="assemblies">The assemblies to scan for FTP command handlers.</param> public AssemblyFtpCommandHandlerExtensionScanner( [NotNull] IFtpCommandHandlerProvider commandHandlerProvider, [CanBeNull] ILogger <AssemblyFtpCommandHandlerExtensionScanner> logger = null, [NotNull, ItemNotNull] params Assembly[] assemblies) { var cmdHandlers = commandHandlerProvider.CommandHandlers.ToList(); _commandHandlers = cmdHandlers.ToDictionary(x => x.Name, StringComparer.OrdinalIgnoreCase); _commandHandlersByType = cmdHandlers.ToLookup(x => x.Type); _logger = logger; _assemblies = assemblies; }
/// <summary> /// Initializes a new instance of the <see cref="DefaultFtpCommandActivator"/> class. /// </summary> /// <param name="serviceProvider">The service provider.</param> /// <param name="commandHandlerProvider">The provider for FTP command handlers.</param> /// <param name="commandHandlerExtensionProvider">The provider for FTP command handler extensions.</param> public DefaultFtpCommandActivator( IServiceProvider serviceProvider, IFtpCommandHandlerProvider commandHandlerProvider, IFtpCommandHandlerExtensionProvider commandHandlerExtensionProvider) { _serviceProvider = serviceProvider; _nameToHandlerInfo = commandHandlerProvider.CommandHandlers.ToDictionary( x => x.Name, StringComparer.OrdinalIgnoreCase); _hostToExtensionInfo = commandHandlerExtensionProvider.CommandHandlerExtensions.ToLookup( x => x.ExtensionOf.Name, StringComparer.OrdinalIgnoreCase); }
/// <summary> /// Initializes a new instance of the <see cref="ServiceFtpCommandHandlerExtensionScanner"/> class. /// </summary> /// <param name="commandHandlerProvider">The FTP command handler provider.</param> /// <param name="commandHandlerExtensions">The FTP command handler extensions.</param> /// <param name="logger">The logger.</param> public ServiceFtpCommandHandlerExtensionScanner( IFtpCommandHandlerProvider commandHandlerProvider, IEnumerable <IFtpCommandHandlerExtension> commandHandlerExtensions, ILogger <ServiceFtpCommandHandlerScanner>?logger = null) { _extensionInformation = CreateInformation(commandHandlerProvider, commandHandlerExtensions, logger).ToList(); // Write warning about obsolete functionality. foreach (var information in _extensionInformation) { var message = $"The command handler extension of type {information.Instance.GetType()}" + $" for {information.Name} was registered via dependency injection." + " This will not be supported in version 4.0 and is currently obsoleted." + " Please create and register your own implementation of IFtpCommandHandlerExtensionScanner or" + " use the AssemblyFtpCommandHandlerExtensionScanner."; logger?.LogWarning(message); Debug.WriteLine($"WARNING: {message}"); } }