private static RepositoryQueuesPrefetchCount GetPrefetchCount(IComponentContext arg)
        {
            var retVal = new RepositoryQueuesPrefetchCount
            {
                DownloadQueuePrefetchCount =
                    BusConfigurator.GetPrefetchCountForEndpoint(BusConstants.RepositoryManagerDownloadPackageMessageQueue) ?? 4,
                SyncQueuePrefetchCount =
                    BusConfigurator.GetPrefetchCountForEndpoint(BusConstants.RepositoryManagerArchiveRecordAppendPackageMessageQueue) ?? 4
            };

            return(retVal);
        }
        /// <summary>
        ///     Die Priorisierungsengine liefert den nächsten Job für die verschiedenen Kanäle.
        ///     Dazu wird geschaut wieviele Aufträge aktuell im Repository Service am laufen sind und in welchen Kanälen.
        ///
        ///     Wenn es in einem Kanal Platz hat, wird der nächste pendente Auftrag aus der Datenbank abgerufen.
        ///
        ///     Es wird mit 4 Kanälen gerechnet, d.h. alle Aufträge werden anhand ihrer Grösse in eine Priorisierungskategorie
        ///     eingeteilt.
        ///     Die Auftäge werden dann anhand der Priorisierungskategorie einem der 4 Kanäle zugeordnet.
        /// </summary>
        /// <param name="primaerdatenDb">Der Datenbankzugriff auf die Primärdaten Jobs.</param>
        /// <param name="channelAssignmentDefinition">
        ///     Die Konfiguration welche Priorisierungskategorien in welchen Kanälen
        ///     zugeordnet werden können
        /// </param>
        /// <param name="prefetchCount">Einstellungen wieviele parallele Jobs die Repository Queue (RabbitMq) verarbeiten kann.</param>
        public PackagePriorizationEngine(IPrimaerdatenAuftragAccess primaerdatenDb, ChannelAssignmentDefinition channelAssignmentDefinition,
                                         RepositoryQueuesPrefetchCount prefetchCount)
        {
            this.primaerdatenDb = primaerdatenDb;

            // Fülle in einen Dictionary wieviele Jobs pro Kanal verfügbar sind.
            MaxJobCountPerChannelForSync     = GetMaxJobCountPerChannel(prefetchCount.SyncQueuePrefetchCount);
            MaxJobCountPerChannelForDownload = GetMaxJobCountPerChannel(prefetchCount.DownloadQueuePrefetchCount);

            // Definieren die KategorieRanges pro Kanal
            KategorieRangesPerChannel = new Dictionary <int, List <List <int> > >
            {
                { 1, SplitKategorienInRanges(channelAssignmentDefinition.GetPrioritiesForChannel(1)) },
                { 2, SplitKategorienInRanges(channelAssignmentDefinition.GetPrioritiesForChannel(2)) },
                { 3, SplitKategorienInRanges(channelAssignmentDefinition.GetPrioritiesForChannel(3)) },
                { 4, SplitKategorienInRanges(channelAssignmentDefinition.GetPrioritiesForChannel(4)) }
            };

            Log.Debug(
                "Initialized Package Priorization Engine with the following settings: Max job count for sync: {MaxJobCountPerChannelForSync}. " +
                "Max job count for download: {MaxJobCountPerChannelForDownload}", MaxJobCountPerChannelForSync, MaxJobCountPerChannelForDownload);
        }