private async Task InjectDependencies() { catalog.SiloStatusOracle = this.siloStatusOracle; this.siloStatusOracle.SubscribeToSiloStatusEvents(localGrainDirectory); // consistentRingProvider is not a system target per say, but it behaves like the localGrainDirectory, so it is here this.siloStatusOracle.SubscribeToSiloStatusEvents((ISiloStatusListener)RingProvider); this.siloStatusOracle.SubscribeToSiloStatusEvents(typeManager); this.siloStatusOracle.SubscribeToSiloStatusEvents(Services.GetRequiredService <DeploymentLoadPublisher>()); var reminderTable = Services.GetService <IReminderTable>(); if (reminderTable != null) { logger.Info($"Creating reminder grain service for type={reminderTable.GetType()}"); // Start the reminder service system target var timerFactory = this.Services.GetRequiredService <IAsyncTimerFactory>(); reminderService = new LocalReminderService(this, reminderTable, this.initTimeout, this.loggerFactory, timerFactory); RegisterSystemTarget((SystemTarget)reminderService); } RegisterSystemTarget(catalog); await scheduler.QueueActionAsync(catalog.Start, catalog) .WithTimeout(initTimeout, $"Starting Catalog failed due to timeout {initTimeout}"); // SystemTarget for provider init calls this.fallbackScheduler = Services.GetRequiredService <FallbackSystemTarget>(); RegisterSystemTarget(fallbackScheduler); }