private static IProjector BuildProjector <TProjector>(IServiceProvider sp, IConfiguration config) where TProjector : IProjector { var sharedSettings = ProjectorsSettings.Get(config); var projectorSettings = ProjectorSettings.Get(config, typeof(TProjector).Name); var subFactoryOptions = GetSubscriberFactoryOptions(sharedSettings); var logger = sp.GetRequiredService <IStandardLogger <TProjector> >(); var subscriberFactory = sp.GetRequiredService <ISubscriberFactory>(); var streamClientFactory = sp.GetRequiredService <IStreamClientFactory>(); var streamStateRepo = new StreamStateRepo(logger, projectorSettings.StreamStateBasePath); var resolver = new AllBusinessEventsResolver(logger); var projectorType = typeof(TProjector); var baseDependencies = new ProjectorDependencies(logger, subscriberFactory, subFactoryOptions, streamClientFactory, streamStateRepo, resolver, MapSubscriptionStreams(sharedSettings.SubscriptionStreams)); if (projectorType == typeof(Projections.EmailReport.EmailReportProjector)) { return(new Projections.EmailReport.EmailReportProjector(baseDependencies, sp.GetRequiredService <IDbContextScopeFactory <Projections.EmailReport.EmailReportDb.EmailReportDbContext> >())); } if (projectorType == typeof(Projections.SalesReport.SalesReportProjector)) { return(new Projections.SalesReport.SalesReportProjector(baseDependencies, sp.GetRequiredService <IDbContextScopeFactory <Projections.SalesReport.SalesReportDb.SalesReportDbContext> >())); } return(null); }
private static SubscriberFactoryOptions GetSubscriberFactoryOptions(ProjectorsSettings settings) => new SubscriberFactoryOptions( settings.MaxResolutionQueueSize, settings.MaxSortingQueueSize, settings.MaxHandlingQueuesSharedSize, settings.MaxParallelHandlerExecutions );