// Token: 0x0600001A RID: 26 RVA: 0x00002B88 File Offset: 0x00000D88
        private void ConstructComponentLoadTree()
        {
            TransportAppConfig.IsMemberOfResolverConfiguration transportIsMemberOfResolverConfig = Components.TransportAppConfig.TransportIsMemberOfResolverConfig;
            IsMemberOfResolverADAdapter <RoutingAddress> .RoutingAddressResolver adAdapter       = new IsMemberOfResolverADAdapter <RoutingAddress> .RoutingAddressResolver(transportIsMemberOfResolverConfig.DisableDynamicGroups);

            Components.TransportIsMemberOfResolverComponent = new IsMemberOfResolverComponent <RoutingAddress>("Transport", transportIsMemberOfResolverConfig, adAdapter);
            Components.StoreDriverSubmission = MailboxTransportSubmissionService.storeDriverSubmission;
            Components.StoreDriverSubmission.Start(false, ServiceState.Active);
            Components.DsnGenerator     = new DsnGenerator();
            Components.AgentComponent   = new AgentComponent();
            Components.RoutingComponent = new RoutingComponent();
            Components.EnhancedDns      = new EnhancedDns();
            Components.UnhealthyTargetFilterComponent = new UnhealthyTargetFilterComponent();
            Components.ProxyHubSelectorComponent      = new ProxyHubSelectorComponent();
            Components.CertificateComponent           = new CertificateComponent();
            Components.Configuration = new ConfigurationComponent(ProcessTransportRole.MailboxSubmission);
            Components.MessageThrottlingComponent           = new MessageThrottlingComponent();
            Components.ResourceManagerComponent             = new ResourceManagerComponent(ResourceManagerResources.PrivateBytes | ResourceManagerResources.TotalBytes);
            Components.SmtpInComponent                      = new SmtpInComponent(false);
            Components.SmtpOutConnectionHandler             = new SmtpOutConnectionHandler();
            Components.SystemCheckComponent                 = new SystemCheckComponent();
            Components.TransportIsMemberOfResolverComponent = new IsMemberOfResolverComponent <RoutingAddress>("Transport", transportIsMemberOfResolverConfig, adAdapter);
            Components.TransportMailItemLoader item = new Components.TransportMailItemLoader();
            Components.Logging           = new Components.LoggingComponent(true, false, false, false, false, "MSGTRKMS");
            StorageFactory.SchemaToUse   = StorageFactory.Schema.NullSchema;
            Components.MessagingDatabase = new MessagingDatabaseComponent();
            Components.PerfCountersLoader perfCountersLoader = new Components.PerfCountersLoader(false);
            Components.PerfCountersLoaderComponent = perfCountersLoader;
            Components.ResourceThrottlingComponent = new ResourceThrottlingComponent(new ResourceMeteringConfig(8000, null), new ResourceThrottlingConfig(null), new ComponentsWrapper(), Components.MessagingDatabase, null, Components.Configuration, ResourceManagerResources.PrivateBytes | ResourceManagerResources.TotalBytes, ResourceObservingComponents.EnhancedDns | ResourceObservingComponents.IsMemberOfResolver | ResourceObservingComponents.SmtpIn);
            ParallelTransportComponent parallelTransportComponent = new ParallelTransportComponent("Parallel Components");

            parallelTransportComponent.TransportComponents.Add(item);
            parallelTransportComponent.TransportComponents.Add(Components.TransportIsMemberOfResolverComponent);
            parallelTransportComponent.TransportComponents.Add(perfCountersLoader);
            parallelTransportComponent.TransportComponents.Add(Components.Logging);
            parallelTransportComponent.TransportComponents.Add(new Components.MicrosoftExchangeRecipientLoader());
            parallelTransportComponent.TransportComponents.Add(Components.DsnGenerator);
            parallelTransportComponent.TransportComponents.Add(Components.MessageThrottlingComponent);
            parallelTransportComponent.TransportComponents.Add(Components.StoreDriverSubmission);
            SequentialTransportComponent sequentialTransportComponent = new SequentialTransportComponent("Database and dependents");

            sequentialTransportComponent.TransportComponents.Add(Components.ResourceManagerComponent);
            ParallelTransportComponent parallelTransportComponent2 = new ParallelTransportComponent("Configuration Certificate and Database components");

            parallelTransportComponent2.TransportComponents.Add(sequentialTransportComponent);
            parallelTransportComponent2.TransportComponents.Add(Components.CertificateComponent);
            SequentialTransportComponent sequentialTransportComponent2 = new SequentialTransportComponent("Root Component");

            sequentialTransportComponent2.TransportComponents.Add(MailboxTransportSubmissionService.quarantineHandler);
            sequentialTransportComponent2.TransportComponents.Add(MailboxTransportSubmissionService.submissionPoisonHandler);
            sequentialTransportComponent2.TransportComponents.Add((ITransportComponent)Components.Configuration);
            sequentialTransportComponent2.TransportComponents.Add(Components.SystemCheckComponent);
            sequentialTransportComponent2.TransportComponents.Add(parallelTransportComponent2);
            sequentialTransportComponent2.TransportComponents.Add(parallelTransportComponent);
            sequentialTransportComponent2.TransportComponents.Add(Components.RoutingComponent);
            sequentialTransportComponent2.TransportComponents.Add(Components.EnhancedDns);
            sequentialTransportComponent2.TransportComponents.Add(Components.UnhealthyTargetFilterComponent);
            sequentialTransportComponent2.TransportComponents.Add(Components.ProxyHubSelectorComponent);
            ParallelTransportComponent parallelTransportComponent3 = new ParallelTransportComponent("SmtpIn and SmtpOut");

            parallelTransportComponent3.TransportComponents.Add(Components.SmtpInComponent);
            parallelTransportComponent3.TransportComponents.Add(Components.SmtpOutConnectionHandler);
            sequentialTransportComponent2.TransportComponents.Add(parallelTransportComponent3);
            sequentialTransportComponent2.TransportComponents.Add(Components.ResourceThrottlingComponent);
            Components.SetDatabaseComponents(sequentialTransportComponent);
            Components.SetRootComponent(sequentialTransportComponent2);
        }
Example #2
0
        // Token: 0x06000011 RID: 17 RVA: 0x0000256C File Offset: 0x0000076C
        private static void ConstructComponentLoadTree()
        {
            TransportAppConfig.IsMemberOfResolverConfiguration transportIsMemberOfResolverConfig    = Components.TransportAppConfig.TransportIsMemberOfResolverConfig;
            TransportAppConfig.IsMemberOfResolverConfiguration mailboxRulesIsMemberOfResolverConfig = Components.TransportAppConfig.MailboxRulesIsMemberOfResolverConfig;
            IsMemberOfResolverADAdapter <RoutingAddress> .RoutingAddressResolver adAdapter          = new IsMemberOfResolverADAdapter <RoutingAddress> .RoutingAddressResolver(transportIsMemberOfResolverConfig.DisableDynamicGroups);

            IsMemberOfResolverADAdapter <string> .LegacyDNResolver adAdapter2 = new IsMemberOfResolverADAdapter <string> .LegacyDNResolver(mailboxRulesIsMemberOfResolverConfig.DisableDynamicGroups);

            Components.AgentComponent    = new AgentComponent();
            Components.MessagingDatabase = new MessagingDatabaseComponent();
            Components.BootScanner       = Components.MessagingDatabase.CreateBootScanner();
            Components.RoutingComponent  = new RoutingComponent();
            Components.EnhancedDns       = new EnhancedDns();
            Components.UnhealthyTargetFilterComponent = new UnhealthyTargetFilterComponent();
            Components.CategorizerComponent           = new CategorizerComponent();
            Components.CertificateComponent           = new CertificateComponent();
            Components.Configuration = new ConfigurationComponent();
            Components.DeliveryAgentConnectionHandler = new DeliveryAgentConnectionHandler();
            Components.DsnGenerator = new DsnGenerator();
            Components.MessageResubmissionComponent            = new MessageResubmissionComponent();
            Components.MailboxRulesIsMemberOfResolverComponent = new IsMemberOfResolverComponent <string>("MailboxRules", mailboxRulesIsMemberOfResolverConfig, adAdapter2);
            Components.MessageThrottlingComponent = new MessageThrottlingComponent();
            Components.OrarGenerator                        = new OrarGenerator();
            Components.PickupComponent                      = new PickupComponent(new Program.TransportPickupSubmissionHandler());
            Components.QueueManager                         = new QueueManager();
            Components.MessageDepotComponent                = new MessageDepotComponent();
            Components.MessageDepotQueueViewerComponent     = new MessageDepotQueueViewerComponent();
            Components.CategorizerAdapterComponent          = new CategorizerAdapterComponent(Components.CategorizerComponent, Components.MessageDepotComponent);
            Components.ProcessingSchedulerComponent         = new ProcessingSchedulerComponent();
            Components.SchedulerAdapterComponent            = new SchedulerAdapterComponent(Components.MessageDepotComponent, Components.ProcessingSchedulerComponent);
            Components.DsnSchedulerComponent                = new DsnSchedulerComponent();
            Components.RemoteDeliveryComponent              = new RemoteDeliveryComponent();
            Components.ResourceManagerComponent             = new ResourceManagerComponent(ResourceManagerResources.All);
            Components.RmsClientManagerComponent            = new RmsClientManagerComponent();
            Components.ShadowRedundancyComponent            = new ShadowRedundancyComponent();
            Components.SmtpInComponent                      = new SmtpInComponent(false);
            Components.SmtpOutConnectionHandler             = new SmtpOutConnectionHandler();
            Components.StoreDriverLoaderComponent           = new Components.StoreDriverLoader();
            Components.SystemCheckComponent                 = new SystemCheckComponent();
            Components.TransportIsMemberOfResolverComponent = new IsMemberOfResolverComponent <RoutingAddress>("Transport", transportIsMemberOfResolverConfig, adAdapter);
            Components.PoisonMessageComponent               = new PoisonMessage();
            Components.Logging  = new Components.LoggingComponent(true, true, true, true, true);
            Components.Metering = (new MeteringConfig().Enabled ? new MeteringComponent() : null);
            IMeteringComponent meteringComponent;

            Components.TryGetMeteringComponent(out meteringComponent);
            IQueueQuotaComponent queueQuotaComponent;

            if (!QueueQuotaConfig.IsQueueQuotaEnabled())
            {
                queueQuotaComponent = null;
            }
            else if (!QueueQuotaConfig.IsQueueQuotaWithMeteringEnabled() || meteringComponent == null)
            {
                IQueueQuotaComponent queueQuotaComponent2 = new QueueQuotaComponent();
                queueQuotaComponent = queueQuotaComponent2;
            }
            else
            {
                queueQuotaComponent = new QueueQuotaComponentWithMetering();
            }
            Components.QueueQuotaComponent      = queueQuotaComponent;
            Components.ProcessingQuotaComponent = new ProcessingQuotaComponent();
            Components.PerfCountersLoader perfCountersLoader = new Components.PerfCountersLoader(true);
            Components.PerfCountersLoaderComponent = perfCountersLoader;
            Components.ResourceThrottlingComponent = new ResourceThrottlingComponent(new ResourceMeteringConfig(8000, null), new ResourceThrottlingConfig(null), new ComponentsWrapper(), Components.MessagingDatabase, Components.CategorizerComponent, Components.Configuration, ResourceManagerResources.All, ResourceObservingComponents.All);
            ParallelTransportComponent parallelTransportComponent = new ParallelTransportComponent("AD Configuration Readers");

            parallelTransportComponent.TransportComponents.Add(new Components.TransportMailItemLoader());
            parallelTransportComponent.TransportComponents.Add(Components.TransportIsMemberOfResolverComponent);
            parallelTransportComponent.TransportComponents.Add(Components.MailboxRulesIsMemberOfResolverComponent);
            parallelTransportComponent.TransportComponents.Add(Components.OrarGenerator);
            parallelTransportComponent.TransportComponents.Add(Components.DsnGenerator);
            parallelTransportComponent.TransportComponents.Add(perfCountersLoader);
            parallelTransportComponent.TransportComponents.Add(Components.Logging);
            parallelTransportComponent.TransportComponents.Add(Components.PoisonMessageComponent);
            parallelTransportComponent.TransportComponents.Add(new Components.DirectTrustLoader());
            parallelTransportComponent.TransportComponents.Add(new Components.MicrosoftExchangeRecipientLoader());
            parallelTransportComponent.TransportComponents.Add(new Components.ServicePrincipalNameRegistrar());
            parallelTransportComponent.TransportComponents.Add(new Components.CategorizerMExRuntimeLoader());
            parallelTransportComponent.TransportComponents.Add(new Components.BootScannerMExRuntimeLoader());
            parallelTransportComponent.TransportComponents.Add(Components.MessageThrottlingComponent);
            parallelTransportComponent.TransportComponents.Add(Components.RmsClientManagerComponent);
            parallelTransportComponent.TransportComponents.Add(Components.ShadowRedundancyComponent);
            parallelTransportComponent.TransportComponents.Add(Components.MessageResubmissionComponent);
            SequentialTransportComponent sequentialTransportComponent = new SequentialTransportComponent("Database and dependents");

            sequentialTransportComponent.TransportComponents.Add(Components.MessagingDatabase);
            sequentialTransportComponent.TransportComponents.Add(Components.ResourceManagerComponent);
            sequentialTransportComponent.TransportComponents.Add(Components.MessageDepotComponent);
            sequentialTransportComponent.TransportComponents.Add(Components.MessageDepotQueueViewerComponent);
            sequentialTransportComponent.TransportComponents.Add(Components.DsnSchedulerComponent);
            sequentialTransportComponent.TransportComponents.Add(new Database());
            ParallelTransportComponent parallelTransportComponent2 = new ParallelTransportComponent("Certificate, RemoteDelivery and Database components");

            parallelTransportComponent2.TransportComponents.Add(sequentialTransportComponent);
            parallelTransportComponent2.TransportComponents.Add(Components.CertificateComponent);
            IQueueQuotaComponent item;

            if (Components.TryGetQueueQuotaComponent(out item))
            {
                parallelTransportComponent2.TransportComponents.Add(item);
            }
            parallelTransportComponent2.TransportComponents.Add(Components.RemoteDeliveryComponent);
            if (meteringComponent != null)
            {
                parallelTransportComponent2.TransportComponents.Add(Components.Metering);
            }
            SequentialTransportComponent sequentialTransportComponent2 = new SequentialTransportComponent("Root Component");

            sequentialTransportComponent2.TransportComponents.Add((ITransportComponent)Components.Configuration);
            sequentialTransportComponent2.TransportComponents.Add(Components.SystemCheckComponent);
            sequentialTransportComponent2.TransportComponents.Add(parallelTransportComponent2);
            sequentialTransportComponent2.TransportComponents.Add((ITransportComponent)Components.AgentComponent);
            sequentialTransportComponent2.TransportComponents.Add(parallelTransportComponent);
            ParallelTransportComponent parallelTransportComponent3 = new ParallelTransportComponent("AD/Database Dependent Components");

            parallelTransportComponent3.TransportComponents.Add(Components.QueueManager);
            sequentialTransportComponent2.TransportComponents.Add(parallelTransportComponent3);
            sequentialTransportComponent2.TransportComponents.Add(Components.RoutingComponent);
            sequentialTransportComponent2.TransportComponents.Add(Components.EnhancedDns);
            sequentialTransportComponent2.TransportComponents.Add(Components.UnhealthyTargetFilterComponent);
            sequentialTransportComponent2.TransportComponents.Add(Components.CategorizerComponent);
            sequentialTransportComponent2.TransportComponents.Add(Components.ProcessingSchedulerComponent);
            sequentialTransportComponent2.TransportComponents.Add(Components.SchedulerAdapterComponent);
            ParallelTransportComponent parallelTransportComponent4 = new ParallelTransportComponent("Categorizer Dependent Components");

            parallelTransportComponent4.TransportComponents.Add(new Components.RpcServerComponent());
            parallelTransportComponent4.TransportComponents.Add(Components.SmtpInComponent);
            parallelTransportComponent4.TransportComponents.Add(Components.StoreDriverLoaderComponent);
            parallelTransportComponent4.TransportComponents.Add(Components.PickupComponent);
            parallelTransportComponent4.TransportComponents.Add(Components.BootScanner);
            parallelTransportComponent4.TransportComponents.Add(Components.SmtpOutConnectionHandler);
            parallelTransportComponent4.TransportComponents.Add(new NonSmtpGatewayConnectionHandler());
            parallelTransportComponent4.TransportComponents.Add(Components.DeliveryAgentConnectionHandler);
            parallelTransportComponent4.TransportComponents.Add(new Components.AggregatorLoader());
            parallelTransportComponent4.TransportComponents.Add(Components.ProcessingQuotaComponent);
            sequentialTransportComponent2.TransportComponents.Add(parallelTransportComponent4);
            sequentialTransportComponent2.TransportComponents.Add(Components.ResourceThrottlingComponent);
            sequentialTransportComponent2.TransportComponents.Add(new BackgroundProcessingThread(new BackgroundProcessingThread.ServerComponentStateChangedHandler(Program.main.HandleServerComponentStateChanged)));
            Components.SetDatabaseComponents(sequentialTransportComponent);
            Components.SetRootComponent(sequentialTransportComponent2);
        }
        // Token: 0x06000016 RID: 22 RVA: 0x000024CC File Offset: 0x000006CC
        private static void ConstructComponentLoadTree()
        {
            TransportAppConfig.IsMemberOfResolverConfiguration transportIsMemberOfResolverConfig = Components.TransportAppConfig.TransportIsMemberOfResolverConfig;
            IsMemberOfResolverADAdapter <RoutingAddress> .RoutingAddressResolver adAdapter       = new IsMemberOfResolverADAdapter <RoutingAddress> .RoutingAddressResolver(transportIsMemberOfResolverConfig.DisableDynamicGroups);

            Components.AgentComponent   = new AgentComponent();
            Components.RoutingComponent = new RoutingComponent();
            Components.EnhancedDns      = new EnhancedDns();
            Components.UnhealthyTargetFilterComponent = new UnhealthyTargetFilterComponent();
            Components.ProxyHubSelectorComponent      = new ProxyHubSelectorComponent();
            Components.CertificateComponent           = new CertificateComponent();
            Components.Configuration = new ConfigurationComponent(ProcessTransportRole.FrontEnd);
            Components.MessageThrottlingComponent           = new MessageThrottlingComponent();
            Components.ResourceManagerComponent             = new ResourceManagerComponent(ResourceManagerResources.PrivateBytes | ResourceManagerResources.TotalBytes);
            Components.SmtpInComponent                      = new SmtpInComponent(false);
            Components.SmtpOutConnectionHandler             = new SmtpOutConnectionHandler();
            Components.SystemCheckComponent                 = new SystemCheckComponent();
            Components.TransportIsMemberOfResolverComponent = new IsMemberOfResolverComponent <RoutingAddress>("Transport", transportIsMemberOfResolverConfig, adAdapter);
            Components.TransportMailItemLoader item = new Components.TransportMailItemLoader();
            Components.Logging                     = new Components.LoggingComponent(false, false, false, false, true);
            StorageFactory.SchemaToUse             = StorageFactory.Schema.NullSchema;
            Components.MessagingDatabase           = new MessagingDatabaseComponent();
            Components.ResourceThrottlingComponent = new ResourceThrottlingComponent(new ResourceMeteringConfig(8000, null), new ResourceThrottlingConfig(null), new ComponentsWrapper(), Components.MessagingDatabase, null, Components.Configuration, ResourceManagerResources.PrivateBytes | ResourceManagerResources.TotalBytes, ResourceObservingComponents.EnhancedDns | ResourceObservingComponents.IsMemberOfResolver | ResourceObservingComponents.SmtpIn);
            Components.PerfCountersLoader perfCountersLoader = new Components.PerfCountersLoader(false);
            Components.PerfCountersLoaderComponent = perfCountersLoader;
            ParallelTransportComponent parallelTransportComponent = new ParallelTransportComponent("AD Configuration Readers");

            parallelTransportComponent.TransportComponents.Add(item);
            parallelTransportComponent.TransportComponents.Add(Components.TransportIsMemberOfResolverComponent);
            parallelTransportComponent.TransportComponents.Add(perfCountersLoader);
            parallelTransportComponent.TransportComponents.Add(Components.Logging);
            parallelTransportComponent.TransportComponents.Add(new Components.ServicePrincipalNameRegistrar());
            parallelTransportComponent.TransportComponents.Add(Components.MessageThrottlingComponent);
            parallelTransportComponent.TransportComponents.Add(new Components.DirectTrustLoader());
            SequentialTransportComponent sequentialTransportComponent = new SequentialTransportComponent("Resource Manager");

            sequentialTransportComponent.TransportComponents.Add(Components.ResourceManagerComponent);
            ParallelTransportComponent parallelTransportComponent2 = new ParallelTransportComponent("Configuration, Certificate, and Resource Manager components");

            parallelTransportComponent2.TransportComponents.Add(sequentialTransportComponent);
            parallelTransportComponent2.TransportComponents.Add(Components.CertificateComponent);
            SequentialTransportComponent sequentialTransportComponent2 = new SequentialTransportComponent("Root Component");

            sequentialTransportComponent2.TransportComponents.Add((ITransportComponent)Components.Configuration);
            sequentialTransportComponent2.TransportComponents.Add(Components.SystemCheckComponent);
            sequentialTransportComponent2.TransportComponents.Add(parallelTransportComponent2);
            sequentialTransportComponent2.TransportComponents.Add((ITransportComponent)Components.AgentComponent);
            sequentialTransportComponent2.TransportComponents.Add(parallelTransportComponent);
            sequentialTransportComponent2.TransportComponents.Add(Components.RoutingComponent);
            sequentialTransportComponent2.TransportComponents.Add(Components.EnhancedDns);
            sequentialTransportComponent2.TransportComponents.Add(Components.UnhealthyTargetFilterComponent);
            sequentialTransportComponent2.TransportComponents.Add(Components.ProxyHubSelectorComponent);
            ParallelTransportComponent parallelTransportComponent3 = new ParallelTransportComponent("SmtpIn and SmtpOut");

            parallelTransportComponent3.TransportComponents.Add(Components.SmtpInComponent);
            parallelTransportComponent3.TransportComponents.Add(Components.SmtpOutConnectionHandler);
            sequentialTransportComponent2.TransportComponents.Add(parallelTransportComponent3);
            sequentialTransportComponent2.TransportComponents.Add(new FrontEndBackgroundProcessingThread(new FrontEndBackgroundProcessingThread.ServerComponentStateChangedHandler(FrontEndTransportService.instance.HandleServerComponentStateChanged)));
            sequentialTransportComponent2.TransportComponents.Add(Components.ResourceThrottlingComponent);
            Components.SetDatabaseComponents(sequentialTransportComponent);
            Components.SetRootComponent(sequentialTransportComponent2);
        }
        private void ConstructComponentLoadTree()
        {
            TransportAppConfig.IsMemberOfResolverConfiguration transportIsMemberOfResolverConfig = Components.TransportAppConfig.TransportIsMemberOfResolverConfig;
            IsMemberOfResolverADAdapter <RoutingAddress> .RoutingAddressResolver adAdapter       = new IsMemberOfResolverADAdapter <RoutingAddress> .RoutingAddressResolver(transportIsMemberOfResolverConfig.DisableDynamicGroups);

            TransportAppConfig.IsMemberOfResolverConfiguration     mailboxRulesIsMemberOfResolverConfig = Components.TransportAppConfig.MailboxRulesIsMemberOfResolverConfig;
            IsMemberOfResolverADAdapter <string> .LegacyDNResolver adAdapter2 = new IsMemberOfResolverADAdapter <string> .LegacyDNResolver(mailboxRulesIsMemberOfResolverConfig.DisableDynamicGroups);

            Components.AgentComponent   = new AgentComponent();
            Components.RoutingComponent = new RoutingComponent();
            Components.EnhancedDns      = new EnhancedDns();
            Components.DsnGenerator     = new DsnGenerator();
            Components.UnhealthyTargetFilterComponent          = new UnhealthyTargetFilterComponent();
            Components.TransportIsMemberOfResolverComponent    = new IsMemberOfResolverComponent <RoutingAddress>("Transport", transportIsMemberOfResolverConfig, adAdapter);
            Components.MailboxRulesIsMemberOfResolverComponent = new IsMemberOfResolverComponent <string>("MailboxRules", mailboxRulesIsMemberOfResolverConfig, adAdapter2);
            Components.StoreDriverDelivery        = StoreDriverDelivery.CreateStoreDriver();
            Components.Categorizer                = this.submitHandler;
            Components.CertificateComponent       = new CertificateComponent();
            Components.Configuration              = new ConfigurationComponent(ProcessTransportRole.MailboxDelivery);
            Components.MessageThrottlingComponent = new MessageThrottlingComponent();
            Components.ResourceManagerComponent   = new ResourceManagerComponent(ResourceManagerResources.PrivateBytes | ResourceManagerResources.TotalBytes);
            Components.SmtpInComponent            = new SmtpInComponent(this.IsModernSmtpStackEnabled());
            Components.SmtpOutConnectionHandler   = new SmtpOutConnectionHandler();
            Components.SystemCheckComponent       = new SystemCheckComponent();
            Components.TransportMailItemLoader item = new Components.TransportMailItemLoader();
            Components.ProxyHubSelectorComponent = new ProxyHubSelectorComponent();
            Components.PoisonMessageComponent    = new PoisonMessage();
            Components.Logging           = new Components.LoggingComponent(false, false, false, false, false);
            StorageFactory.SchemaToUse   = StorageFactory.Schema.NullSchema;
            Components.MessagingDatabase = new MessagingDatabaseComponent();
            Components.PerfCountersLoader perfCountersLoader = new Components.PerfCountersLoader(false);
            Components.PerfCountersLoaderComponent = perfCountersLoader;
            Components.ResourceThrottlingComponent = new ResourceThrottlingComponent(new ResourceMeteringConfig(8000, null), new ResourceThrottlingConfig(null), new ComponentsWrapper(), Components.MessagingDatabase, null, Components.Configuration, ResourceManagerResources.PrivateBytes | ResourceManagerResources.TotalBytes, ResourceObservingComponents.EnhancedDns | ResourceObservingComponents.IsMemberOfResolver | ResourceObservingComponents.SmtpIn);
            ParallelTransportComponent parallelTransportComponent = new ParallelTransportComponent("Parallel Group 1");

            parallelTransportComponent.TransportComponents.Add(Components.ResourceManagerComponent);
            parallelTransportComponent.TransportComponents.Add(Components.CertificateComponent);
            parallelTransportComponent.TransportComponents.Add(Components.TransportIsMemberOfResolverComponent);
            parallelTransportComponent.TransportComponents.Add(Components.MailboxRulesIsMemberOfResolverComponent);
            ParallelTransportComponent parallelTransportComponent2 = new ParallelTransportComponent("Parallel Group 2");

            parallelTransportComponent2.TransportComponents.Add(item);
            parallelTransportComponent2.TransportComponents.Add(new Components.MicrosoftExchangeRecipientLoader());
            parallelTransportComponent2.TransportComponents.Add(perfCountersLoader);
            parallelTransportComponent2.TransportComponents.Add(Components.Logging);
            parallelTransportComponent2.TransportComponents.Add(Components.PoisonMessageComponent);
            parallelTransportComponent2.TransportComponents.Add(Components.MessageThrottlingComponent);
            parallelTransportComponent2.TransportComponents.Add(Components.StoreDriverDelivery);
            parallelTransportComponent2.TransportComponents.Add((ITransportComponent)Components.AgentComponent);
            ParallelTransportComponent parallelTransportComponent3 = new ParallelTransportComponent("Parallel Group 3");

            parallelTransportComponent3.TransportComponents.Add(Components.SmtpInComponent);
            parallelTransportComponent3.TransportComponents.Add(Components.SmtpOutConnectionHandler);
            parallelTransportComponent3.TransportComponents.Add(Components.RoutingComponent);
            parallelTransportComponent3.TransportComponents.Add(Components.UnhealthyTargetFilterComponent);
            parallelTransportComponent3.TransportComponents.Add(Components.DsnGenerator);
            parallelTransportComponent3.TransportComponents.Add(DeliveryConfiguration.poisonHandler);
            Components.SetRootComponent(new SequentialTransportComponent("Root Component")
            {
                TransportComponents =
                {
                    (ITransportComponent)Components.Configuration,
                    Components.SystemCheckComponent,
                    parallelTransportComponent,
                    parallelTransportComponent2,
                    parallelTransportComponent3,
                    Components.ResourceThrottlingComponent,
                    Components.ProxyHubSelectorComponent
                }
            });
        }