/// <summary>
 /// Initializes a new instance of the <see cref="PhysicalMachineEnvironmentActivator"/> class.
 /// </summary>
 /// <param name="configuration">The object that stores all the configuration values for the application.</param>
 /// <param name="commands">The object that stores all the command sets that were received from remote endpoints.</param>
 /// <param name="notifications">The object that provides notifications from remote endpoints.</param>
 /// <param name="disconnection">The delegate used to notify the communication system of the disconnection of an endpoint.</param>
 /// <param name="uploads">The object that tracks the files available for upload.</param>
 /// <param name="diagnostics">The object that provides the diagnostics methods for the application.</param>
 /// <exception cref="ArgumentNullException">
 ///     Thrown if <paramref name="configuration"/> is <see langword="null" />.
 /// </exception>
 /// <exception cref="ArgumentNullException">
 ///     Thrown if <paramref name="commands"/> is <see langword="null" />.
 /// </exception>
 /// <exception cref="ArgumentNullException">
 ///     Thrown if <paramref name="notifications"/> is <see langword="null" />.
 /// </exception>
 /// <exception cref="ArgumentNullException">
 ///     Thrown if <paramref name="disconnection"/> is <see langword="null" />.
 /// </exception>
 /// <exception cref="ArgumentNullException">
 ///     Thrown if <paramref name="uploads"/> is <see langword="null" />.
 /// </exception>
 /// <exception cref="ArgumentNullException">
 ///     Thrown if <paramref name="diagnostics"/> is <see langword="null" />.
 /// </exception>
 public PhysicalMachineEnvironmentActivator(
     IConfiguration configuration,
     ISendCommandsToRemoteEndpoints commands,
     INotifyOfRemoteEndpointEvents notifications,
     ManualEndpointDisconnection disconnection,
     IStoreUploads uploads,
     SystemDiagnostics diagnostics)
     : base(configuration, commands, notifications, disconnection, uploads, diagnostics)
 {
 }
        /// <summary>
        /// Initializes a new instance of the <see cref="HypervEnvironmentActivator"/> class.
        /// </summary>
        /// <param name="configuration">The object that stores all the configuration values for the application.</param>
        /// <param name="commands">The object that stores all the command sets that were received from remote endpoints.</param>
        /// <param name="notifications">The object that provides notifications from remote endpoints.</param>
        /// <param name="disconnection">The delegate used to notify the communication system of the disconnection of an endpoint.</param>
        /// <param name="uploads">The object that tracks the files available for upload.</param>
        /// <param name="diagnostics">The object that provides the diagnostics methods for the application.</param>
        /// <param name="environmentById">The function that is used to find environments based on their ID.</param>
        /// <exception cref="ArgumentNullException">
        ///     Thrown if <paramref name="configuration"/> is <see langword="null" />.
        /// </exception>
        /// <exception cref="ArgumentNullException">
        ///     Thrown if <paramref name="commands"/> is <see langword="null" />.
        /// </exception>
        /// <exception cref="ArgumentNullException">
        ///     Thrown if <paramref name="notifications"/> is <see langword="null" />.
        /// </exception>
        /// <exception cref="ArgumentNullException">
        ///     Thrown if <paramref name="disconnection"/> is <see langword="null" />.
        /// </exception>
        /// <exception cref="ArgumentNullException">
        ///     Thrown if <paramref name="uploads"/> is <see langword="null" />.
        /// </exception>
        /// <exception cref="ArgumentNullException">
        ///     Thrown if <paramref name="diagnostics"/> is <see langword="null" />.
        /// </exception>
        /// <exception cref="ArgumentNullException">
        ///     Thrown if <paramref name="environmentById"/> is <see langword="null" />.
        /// </exception>
        public HypervEnvironmentActivator(
            IConfiguration configuration,
            ISendCommandsToRemoteEndpoints commands,
            INotifyOfRemoteEndpointEvents notifications,
            ManualEndpointDisconnection disconnection,
            IStoreUploads uploads,
            SystemDiagnostics diagnostics,
            Func<string, MachineDescription> environmentById)
            : base(configuration, commands, notifications, disconnection, uploads, diagnostics)
        {
            {
                Lokad.Enforce.Argument(() => environmentById);
            }

            m_EnvironmentById = environmentById;
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="MachineEnvironmentActivator"/> class.
        /// </summary>
        /// <param name="configuration">The object that stores all the configuration values for the application.</param>
        /// <param name="commands">The object that stores all the command sets that were received from remote endpoints.</param>
        /// <param name="notifications">The object that provides notifications from remote endpoints.</param>
        /// <param name="disconnection">The delegate used to notify the communication system of the disconnection of an endpoint.</param>
        /// <param name="uploads">The object that tracks the files available for upload.</param>
        /// <param name="diagnostics">The object that provides the diagnostics methods for the application.</param>
        /// <exception cref="ArgumentNullException">
        ///     Thrown if <paramref name="configuration"/> is <see langword="null" />.
        /// </exception>
        /// <exception cref="ArgumentNullException">
        ///     Thrown if <paramref name="commands"/> is <see langword="null" />.
        /// </exception>
        /// <exception cref="ArgumentNullException">
        ///     Thrown if <paramref name="notifications"/> is <see langword="null" />.
        /// </exception>
        /// <exception cref="ArgumentNullException">
        ///     Thrown if <paramref name="disconnection"/> is <see langword="null" />.
        /// </exception>
        /// <exception cref="ArgumentNullException">
        ///     Thrown if <paramref name="uploads"/> is <see langword="null" />.
        /// </exception>
        /// <exception cref="ArgumentNullException">
        ///     Thrown if <paramref name="diagnostics"/> is <see langword="null" />.
        /// </exception>
        protected MachineEnvironmentActivator(
            IConfiguration configuration,
            ISendCommandsToRemoteEndpoints commands,
            INotifyOfRemoteEndpointEvents notifications,
            ManualEndpointDisconnection disconnection,
            IStoreUploads uploads,
            SystemDiagnostics diagnostics)
        {
            {
                Lokad.Enforce.Argument(() => configuration);
                Lokad.Enforce.Argument(() => commands);
                Lokad.Enforce.Argument(() => notifications);
                Lokad.Enforce.Argument(() => disconnection);
                Lokad.Enforce.Argument(() => uploads);
                Lokad.Enforce.Argument(() => diagnostics);
            }

            m_Configuration = configuration;
            m_Commands = commands;
            m_Notifications = notifications;
            m_Disconnection = disconnection;
            m_Uploads = uploads;
            m_Diagnostics = diagnostics;
        }