public UniverseAlertsSubscriber(
            int opCtxId,
            bool isBackTest,
            ICancelledOrderRuleCachedMessageSender cancelledOrderMessageSender,
            IHighVolumeRuleCachedMessageSender highVolumeMessageSender,
            ILayeringCachedMessageSender layeringMessageSender,
            IMarkingTheCloseMessageSender markingTheCloseMessageSender,
            ISpoofingRuleMessageSender spoofingMessageSender,
            IWashTradeCachedMessageSender equityWashTradeMessageSender,
            IWashTradeCachedMessageSender fixedIncomeWashTradeMessageSender,
            IRampingRuleCachedMessageSender rampingRuleMessageSender,
            IPlacingOrdersWithNoIntentToExecuteCacheMessageSender placingOrdersCacheMessageSender,
            ILogger <IUniverseAlertSubscriber> logger)
        {
            this._isBackTest = isBackTest;

            this._cancelledOrderMessageSender = cancelledOrderMessageSender
                                                ?? throw new ArgumentNullException(nameof(cancelledOrderMessageSender));

            this._highVolumeMessageSender = highVolumeMessageSender
                                            ?? throw new ArgumentNullException(nameof(highVolumeMessageSender));

            this._layeringCachedMessageSender =
                layeringMessageSender ?? throw new ArgumentNullException(nameof(layeringMessageSender));

            this._markingTheCloseMessageSender = markingTheCloseMessageSender
                                                 ?? throw new ArgumentNullException(
                                                           nameof(markingTheCloseMessageSender));

            this._spoofingMessageSender =
                spoofingMessageSender ?? throw new ArgumentNullException(nameof(spoofingMessageSender));

            this._equityWashTradeMessageSender = equityWashTradeMessageSender
                                                 ?? throw new ArgumentNullException(
                                                           nameof(equityWashTradeMessageSender));

            this._fixedIncomeWashTradeMessageSender = fixedIncomeWashTradeMessageSender
                                                      ?? throw new ArgumentNullException(
                                                                nameof(fixedIncomeWashTradeMessageSender));

            this._rampingRuleMessageSender = rampingRuleMessageSender
                                             ?? throw new ArgumentNullException(nameof(rampingRuleMessageSender));

            this._placingOrdersMessageSender = placingOrdersCacheMessageSender
                                               ?? throw new ArgumentNullException(
                                                         nameof(placingOrdersCacheMessageSender));

            this._logger   = logger ?? throw new ArgumentNullException(nameof(logger));
            this.Analytics = new AlertAnalytics {
                SystemProcessOperationId = opCtxId
            };
        }
        public UniverseAlertStreamSubscriberFactory(
            ICancelledOrderRuleCachedMessageSender cancelledOrderMessageSender,
            IHighVolumeRuleCachedMessageSender highVolumeMessageSender,
            ILayeringCachedMessageSender layeringMessageSender,
            IMarkingTheCloseMessageSender markingTheCloseMessageSender,
            ISpoofingRuleMessageSender spoofingMessageSender,
            IWashTradeCachedMessageSender washTradeMessageSender,
            IWashTradeCachedMessageSender fixedIncomeWashTradeMessageSender,
            IRampingRuleCachedMessageSender rampingMessageSender,
            IPlacingOrdersWithNoIntentToExecuteCacheMessageSender placingOrdersMessageSender,
            ILogger <IUniverseAlertSubscriber> logger)
        {
            this._cancelledOrderMessageSender = cancelledOrderMessageSender
                                                ?? throw new ArgumentNullException(nameof(cancelledOrderMessageSender));

            this._highVolumeMessageSender = highVolumeMessageSender
                                            ?? throw new ArgumentNullException(nameof(highVolumeMessageSender));

            this._layeringCachedMessageSender =
                layeringMessageSender ?? throw new ArgumentNullException(nameof(layeringMessageSender));

            this._markingTheCloseMessageSender = markingTheCloseMessageSender
                                                 ?? throw new ArgumentNullException(
                                                           nameof(markingTheCloseMessageSender));

            this._spoofingMessageSender =
                spoofingMessageSender ?? throw new ArgumentNullException(nameof(spoofingMessageSender));

            this._washTradeMessageSender =
                washTradeMessageSender ?? throw new ArgumentNullException(nameof(washTradeMessageSender));

            this._placingOrdersMessageSender = placingOrdersMessageSender
                                               ?? throw new ArgumentNullException(nameof(placingOrdersMessageSender));

            this._fixedIncomeWashTradeMessageSender = fixedIncomeWashTradeMessageSender
                                                      ?? throw new ArgumentNullException(
                                                                nameof(washTradeMessageSender));

            this._rampingMessageSender =
                rampingMessageSender ?? throw new ArgumentNullException(nameof(rampingMessageSender));

            this._logger = logger ?? throw new ArgumentNullException(nameof(logger));
        }