예제 #1
0
        public static IRevoConfiguration ConfigureInfrastructure(this IRevoConfiguration configuration,
                                                                 AsyncEventPipelineConfiguration asyncEventPipelineConfiguration = null,
                                                                 Action <InfrastructureConfigurationSection> advancedAction      = null)
        {
            configuration.ConfigureCore();

            var section = configuration.GetSection <InfrastructureConfigurationSection>();

            section.AsyncEventPipeline = asyncEventPipelineConfiguration ?? section.AsyncEventPipeline;

            advancedAction?.Invoke(section);

            configuration.ConfigureKernel(c =>
            {
                if (!c.Kernel.GetBindings(typeof(IAsyncEventPipelineConfiguration)).Any())
                {
                    c.Kernel.Bind <IAsyncEventPipelineConfiguration>().ToConstant(section.AsyncEventPipeline);
                }

                if (section.EnableSagas)
                {
                    c.LoadModule <SagasModule>();
                }
            });

            return(configuration);
        }
예제 #2
0
        protected override IKernel CreateKernel()
        {
            revoConfiguration = CreateRevoConfiguration();

            var kernel = new StandardKernel();

            loadedAssemblies.Clear();

            try
            {
                kernel.Bind <Func <IKernel> >().ToMethod(ctx => () => kernel);
                kernel.Bind <StandardKernel>().ToMethod(ctx => kernel as StandardKernel);

                GlobalConfiguration.Configuration.UseNinjectActivator(kernel);

                LocalConfiguration.Current       = new WebConfiguration();
                NinjectBindingExtensions.Current = new AspNetNinjectBindingExtension();

                kernelBootstrapper = new KernelBootstrapper(kernel, revoConfiguration);
                kernelBootstrapper.Configure();

                var domainAssemblies = GetCurrentDomainAssemblies();
                kernelBootstrapper.LoadAssemblies(domainAssemblies);
                loadedAssemblies.AddRange(domainAssemblies);

                return(kernel);
            }
            catch
            {
                kernel.Dispose();
                throw;
            }
        }
        public static IRevoConfiguration UseEF6Repositories(this IRevoConfiguration configuration,
                                                            bool useCrudAggregateStore = true, bool useEventSourcedAggregateStore = true,
                                                            Action <EF6InfrastructureConfigurationSection> advancedAction = null)
        {
            var section = configuration.GetSection <EF6InfrastructureConfigurationSection>();

            section.UseCrudAggregateStore         = useCrudAggregateStore;
            section.UseEventSourcedAggregateStore = useEventSourcedAggregateStore;

            advancedAction?.Invoke(section);

            configuration.ConfigureKernel(c =>
            {
                var dataAccessSection = configuration.GetSection <EF6DataAccessConfigurationSection>();
                if (!dataAccessSection.IsActive || !dataAccessSection.UseAsPrimaryRepository)
                {
                    throw new InvalidOperationException("EF6 data access must be enabled and configured as primary data repository in order to use EF6 aggregate stores.");

                    // TODO ensure EF6 aggregate stores get injected the correct EF6 repository/event store (in case there are more registered)
                    // to make it possible to use it even when not configured as primary data access
                }

                c.LoadModule(new EF6RepositoriesModule(section));
            });

            return(configuration);
        }
예제 #4
0
        public static IRevoConfiguration ConfigureInfrastructure(this IRevoConfiguration configuration,
                                                                 Action <InfrastructureConfigurationSection> action = null)
        {
            configuration.ConfigureCore();
            configuration.UseInMemoryJobs(isActive: null); // activate only if not previously disabled

            var section = configuration.GetSection <InfrastructureConfigurationSection>();

            action?.Invoke(section);

            configuration.ConfigureKernel(c =>
            {
                if (!c.Kernel.GetBindings(typeof(IAsyncEventPipelineConfiguration)).Any())
                {
                    c.Kernel.Bind <IAsyncEventPipelineConfiguration>().ToConstant(section.AsyncEventPipeline);
                }

                if (!c.Kernel.GetBindings(typeof(DatabaseMigrationsConfiguration)).Any())
                {
                    c.Kernel.Bind <DatabaseMigrationsConfiguration>().ToConstant(section.DatabaseMigrations);
                }

                c.LoadModule(new DatabaseMigrationsModule(section.DatabaseMigrations));

                if (section.EnableSagas)
                {
                    c.LoadModule <SagasModule>();
                }
            });

            return(configuration);
        }
        public static IRevoConfiguration UseEFCoreDataAccess(this IRevoConfiguration configuration,
                                                             Action <DbContextOptionsBuilder> configurer,
                                                             bool?useAsPrimaryRepository = true,
                                                             Action <EFCoreDataAccessConfigurationSection> advancedAction = null)
        {
            var section = configuration.GetSection <EFCoreDataAccessConfigurationSection>();

            section.IsActive = true;
            section.UseAsPrimaryRepository = useAsPrimaryRepository ?? section.UseAsPrimaryRepository;
            section.Configurer             = configurer ?? section.Configurer;

            advancedAction?.Invoke(section);

            configuration.ConfigureKernel(c =>
            {
                if (section.IsActive)
                {
                    c.LoadModule(new EFCoreDataAccessModule(section));

                    if (section.EnableMigrationProvider)
                    {
                        c.LoadModule(new EFCoreMigrationsModule(section));
                    }
                }
            });

            return(configuration);
        }
예제 #6
0
        public static void Register(HttpConfiguration config, IRevoConfiguration revoConfiguration)
        {
            var aspNetConfig = revoConfiguration.GetSection <AspNetConfigurationSection>();

            if (aspNetConfig.UseODataExtensions)
            {
                config.Filters.Add(new ODataActionFilterAttribute()); //also applies the OData filters (instead of a global AddODataQueryFilter(...)
            }
        }
 public static IRevoConfiguration UseAllEFCoreInfrastructure(this IRevoConfiguration configuration,
                                                             Action <EFCoreInfrastructureConfigurationSection> advancedAction = null)
 {
     return(configuration
            .UseEFCoreDataAccess(null)
            .UseEFCoreRepositories()
            .UseEFCoreAsyncEvents()
            .UseEFCoreEventStore()
            .UseEFCoreProjections()
            .UseEFCoreSagas());
 }
예제 #8
0
        public static IRevoConfiguration OverrideModuleLoading(this IRevoConfiguration configuration,
                                                               Type moduleType, bool isLoaded,
                                                               Action <KernelConfigurationSection> advancedAction = null)
        {
            var section = configuration.GetSection <KernelConfigurationSection>();

            section.OverrideModuleLoading(moduleType, isLoaded);
            advancedAction?.Invoke(section);

            return(configuration);
        }
예제 #9
0
        public static IRevoConfiguration ConfigureKernel(this IRevoConfiguration configuration,
                                                         Action <IKernelConfigurationContext> configureAction,
                                                         Action <KernelConfigurationSection> advancedAction = null)
        {
            var section = configuration.GetSection <KernelConfigurationSection>();

            section.AddAction(configureAction);

            advancedAction?.Invoke(section);

            return(configuration);
        }
예제 #10
0
        public static IRevoConfiguration ConfigureCore(this IRevoConfiguration configuration,
                                                       Action <CoreConfigurationSection> advancedAction = null)
        {
            var section = configuration.GetSection <CoreConfigurationSection>();

            advancedAction?.Invoke(section);

            configuration.ConfigureKernel(c =>
            {
                c.LoadModule(new CoreModule(section));
            });

            return(configuration);
        }
예제 #11
0
        public KernelBootstrapperTests()
        {
            kernel = Substitute.For <IKernel>();
            kernel.WhenForAnyArgs(x => x.Load((IEnumerable <INinjectModule>)null)).Do(ci => loadedModules.AddRange(ci.ArgAt <IEnumerable <INinjectModule> >(0)));
            kernel.CreateRequest(null, null, null, false, false).ReturnsForAnyArgs(ci =>
            {
                var request = Substitute.For <IRequest>();
                request.Service.Returns(ci.ArgAt <Type>(0));
                return(request);
            });

            revoConfiguration = Substitute.For <IRevoConfiguration>();
            revoConfiguration.GetSection <KernelConfigurationSection>().Returns(kernelConfigurationSection);

            sut = new KernelBootstrapper(kernel, revoConfiguration);
        }
예제 #12
0
        public static IRevoConfiguration UseInMemoryJobs(this IRevoConfiguration configuration,
                                                         bool?isActive = true,
                                                         Action <InMemoryJobsConfigurationSection> advancedAction = null)
        {
            var section = configuration.GetSection <InMemoryJobsConfigurationSection>();

            section.IsActive = isActive ?? (section.IsActive ?? true);

            advancedAction?.Invoke(section);

            configuration.ConfigureKernel(c =>
            {
                c.LoadModule(new InMemoryJobsModule(section.SchedulerConfiguration, section.IsActive ?? true));
            });

            return(configuration);
        }
        public static IRevoConfiguration UseEFCoreRepositories(this IRevoConfiguration configuration,
                                                               bool useCrudAggregateStore = true, bool useEventSourcedAggregateStore = true,
                                                               Action <EFCoreInfrastructureConfigurationSection> advancedAction = null)
        {
            var section = configuration.GetSection <EFCoreInfrastructureConfigurationSection>();

            section.UseCrudAggregateStore         = useCrudAggregateStore;
            section.UseEventSourcedAggregateStore = useEventSourcedAggregateStore;

            advancedAction?.Invoke(section);

            configuration.ConfigureKernel(c =>
            {
                c.LoadModule(new EFCoreRepositoriesModule(section));
            });

            return(configuration);
        }
        public static IRevoConfiguration ConfigureEFCoreAspNetCoreOData(this IRevoConfiguration configuration,
                                                                        Action <EFCoreAspNetCoreODataConfigurationSection> action = null)
        {
            var section = configuration.GetSection <EFCoreAspNetCoreODataConfigurationSection>();

            action?.Invoke(section);

            configuration.ConfigureKernel(c =>
            {
                if (!c.Kernel.GetBindings(typeof(EFCoreAspNetCoreODataConfigurationSection)).Any())
                {
                    c.Kernel.Bind <EFCoreAspNetCoreODataConfigurationSection>()
                    .ToConstant(section);
                }
            });

            return(configuration);
        }
        public static IRevoConfiguration UseEFCoreSagas(this IRevoConfiguration configuration,
                                                        Action <EFCoreInfrastructureConfigurationSection> advancedAction = null)
        {
            var section = configuration.GetSection <EFCoreInfrastructureConfigurationSection>();

            section.UseSagas = true;

            advancedAction?.Invoke(section);

            configuration.ConfigureKernel(c =>
            {
                if (section.UseSagas)
                {
                    c.LoadModule <EFCoreSagasModule>();
                }
            });

            return(configuration);
        }
예제 #16
0
        public static IRevoConfiguration AddAutoMapperExtension(this IRevoConfiguration configuration,
                                                                Action <AutoMapperConfigurationSection> advancedAction = null)
        {
            var section = configuration.GetSection <AutoMapperConfigurationSection>();

            section.AutoDiscoverProfiles = true;

            advancedAction?.Invoke(section);

            configuration.ConfigureKernel(c =>
            {
                if (section.AutoDiscoverProfiles)
                {
                    c.LoadModule(new AutoMapperModule());
                }
            });

            return(configuration);
        }
        public static IRevoConfiguration AddNotificationsExtension(this IRevoConfiguration configuration,
                                                                   Action <NotificationsConfigurationSection> advancedAction = null)
        {
            var section = configuration.GetSection <NotificationsConfigurationSection>();

            section.IsActive = true;

            advancedAction?.Invoke(section);

            configuration.ConfigureKernel(c =>
            {
                if (section.IsActive)
                {
                    c.LoadModule(new NotificationsModule());
                }
            });

            return(configuration);
        }
예제 #18
0
        public static IRevoConfiguration ConfigureCore(this IRevoConfiguration configuration,
                                                       Action <CoreConfigurationSection> advancedAction = null)
        {
            var section = configuration.GetSection <CoreConfigurationSection>();

            advancedAction?.Invoke(section);

            configuration.ConfigureKernel(c =>
            {
                c.LoadModule(new CoreModule(section));
                c.LoadModule(new CommandsModule(section.Commands));

                if (section.Security.UseNullSecurityModule)
                {
                    c.LoadModule(new NullCoreSecurityModule());
                }
            });

            return(configuration);
        }
예제 #19
0
        public static IRevoConfiguration AddHistoryExtension(this IRevoConfiguration configuration,
                                                             bool?isChangeTrackingActive = true,
                                                             Action <HistoryConfigurationSection> advancedAction = null)
        {
            var section = configuration.GetSection <HistoryConfigurationSection>();

            section.IsChangeTrackingActive = isChangeTrackingActive ?? section.IsChangeTrackingActive;

            advancedAction?.Invoke(section);

            configuration.ConfigureKernel(c =>
            {
                if (section.IsChangeTrackingActive)
                {
                    c.LoadModule(new HistoryModule());
                }
            });

            return(configuration);
        }
예제 #20
0
        public static IRevoConfiguration ConfigureApnsNotifications(this IRevoConfiguration configuration,
                                                                    IApnsAppConfiguration[] apnsApps = null,
                                                                    Action <ApnsNotificationsConfigurationSection> advancedAction = null)
        {
            var section = configuration.GetSection <ApnsNotificationsConfigurationSection>();

            section.AppConfigurations = apnsApps ?? new IApnsAppConfiguration[0];

            advancedAction?.Invoke(section);

            configuration.ConfigureKernel(c =>
            {
                if (section.AppConfigurations.Count > 0)
                {
                    c.LoadModule(new ApnsNotificationsModule(section.AppConfigurations));
                }
            });

            return(configuration);
        }
예제 #21
0
        public static IRevoConfiguration ConfigureMailNotifications(this IRevoConfiguration configuration,
                                                                    Func <IMailNotificationSender> mailSenderFactory,
                                                                    Action <MailNotificationsConfigurationSection> advancedAction = null)
        {
            var section = configuration.GetSection <MailNotificationsConfigurationSection>();

            section.MailSenderFactoryFunc = mailSenderFactory;

            advancedAction?.Invoke(section);

            configuration.ConfigureKernel(c =>
            {
                if (section.MailSenderFactoryFunc != null)
                {
                    c.LoadModule(new MailNotificationsModule(section.MailSenderFactoryFunc));
                }
            });

            return(configuration);
        }
예제 #22
0
        public static IRevoConfiguration UseEasyNetQ(this IRevoConfiguration configuration,
                                                     bool?isActive = true,
                                                     EasyNetQConnectionConfiguration connection = null,
                                                     Action <EasyNetQSubscriptionsConfiguration> subscriptions = null,
                                                     Action <EasyNetQConfigurationSection> advancedAction      = null)
        {
            var section = configuration.GetSection <EasyNetQConfigurationSection>();

            section.IsActive   = isActive ?? section.IsActive;
            section.Connection = connection ?? section.Connection;

            subscriptions?.Invoke(section.Subscriptions);
            advancedAction?.Invoke(section);

            configuration.ConfigureKernel(c =>
            {
                c.LoadModule(new EasyNetQModule(section));
            });

            return(configuration);
        }
예제 #23
0
        public static IRevoConfiguration UseAspNetCore(this IRevoConfiguration configuration,
                                                       Action <AspNetCoreConfigurationSection> advancedAction = null)
        {
            var section = configuration.GetSection <AspNetCoreConfigurationSection>();

            section.IsActive = true;

            advancedAction?.Invoke(section);

            configuration.ConfigureKernel(c =>
            {
                if (section.IsActive)
                {
                    var hangfireConfigurationSection = configuration.GetSection <HangfireConfigurationSection>();
                    c.LoadModule(new AspNetCoreModule(hangfireConfigurationSection));
                    c.LoadModule(new AspNetCoreSecurityModule());
                }
            });

            return(configuration);
        }
예제 #24
0
        public static IRevoConfiguration UseRebus(this IRevoConfiguration configuration,
                                                  RebusConnectionConfiguration connection           = null,
                                                  Action <RebusConfigurationSection> advancedAction = null)
        {
            var section = configuration.GetSection <RebusConfigurationSection>();

            section.IsActive   = true;
            section.Connection = connection ?? section.Connection;

            advancedAction?.Invoke(section);

            configuration.ConfigureKernel(c =>
            {
                if (section.IsActive)
                {
                    c.LoadModule(new RebusModule(section.Connection));
                }
            });

            return(configuration);
        }
        public static IRevoConfiguration UseEFCoreProjections(this IRevoConfiguration configuration,
                                                              bool autoDiscoverProjectors = true,
                                                              Action <EFCoreInfrastructureConfigurationSection> advancedAction = null)
        {
            var section = configuration.GetSection <EFCoreInfrastructureConfigurationSection>();

            section.UseProjections         = true;
            section.AutoDiscoverProjectors = autoDiscoverProjectors;

            advancedAction?.Invoke(section);

            configuration.ConfigureKernel(c =>
            {
                if (section.UseProjections)
                {
                    c.LoadModule(new EFCoreProjectionsModule(section));
                }
            });

            return(configuration);
        }
        public static IRevoConfiguration UseRavenProjections(this IRevoConfiguration configuration,
                                                             bool autoDiscoverProjectors = true,
                                                             Action <RavenConfigurationSection> advancedAction = null)
        {
            configuration.UseRavenDataAccess(null);

            var section = configuration.GetSection <RavenConfigurationSection>();

            section.UseProjections         = true;
            section.AutoDiscoverProjectors = autoDiscoverProjectors;

            advancedAction?.Invoke(section);

            configuration.ConfigureKernel(c =>
            {
                if (section.UseProjections)
                {
                    c.LoadModule(new RavenProjectionsModule(section));
                }
            });

            return(configuration);
        }
        public static IRevoConfiguration UseHangfire(this IRevoConfiguration configuration,
                                                     Func <JobStorage> jobStorage = null,
                                                     Action <HangfireConfigurationSection> advancedAction = null)
        {
            configuration.UseInMemoryJobs(false);

            var section = configuration.GetSection <HangfireConfigurationSection>();

            section.IsActive   = true;
            section.JobStorage = jobStorage ?? section.JobStorage;

            advancedAction?.Invoke(section);

            configuration.ConfigureKernel(c =>
            {
                if (section.IsActive)
                {
                    c.LoadModule(new HangfireModule(section));
                }
            });

            return(configuration);
        }
        public static IRevoConfiguration UseRavenDataAccess(this IRevoConfiguration configuration,
                                                            RavenConnectionConfiguration connection,
                                                            bool?useAsPrimaryRepository = true,
                                                            Action <RavenConfigurationSection> advancedAction = null)
        {
            var section = configuration.GetSection <RavenConfigurationSection>();

            section.IsActive               = true;
            section.Connection             = connection ?? section.Connection;
            section.UseAsPrimaryRepository = useAsPrimaryRepository ?? section.UseAsPrimaryRepository;

            advancedAction?.Invoke(section);

            configuration.ConfigureKernel(c =>
            {
                if (section.IsActive)
                {
                    c.LoadModule(new RavenModule(section.Connection, section.UseAsPrimaryRepository));
                }
            });

            return(configuration);
        }
        public static IRevoConfiguration UseAspNet(this IRevoConfiguration configuration,
                                                   Action <AspNetConfigurationSection> advancedAction = null)
        {
            var section = configuration.GetSection <AspNetConfigurationSection>();

            section.IsActive = true;

            advancedAction?.Invoke(section);

            configuration.ConfigureKernel(c =>
            {
                if (section.IsActive)
                {
                    var hangfireConfigurationSection = configuration.GetSection <HangfireConfigurationSection>();
                    c.LoadModule(new CorePlatformModule(hangfireConfigurationSection));
                    c.LoadModule(new SecurityModule());
                    c.LoadModule(new NullAspNetIdentityModule());
                    c.LoadModule(new GlobalizationModule());
                    c.LoadModule(new TemplatesModule());
                }
            });

            return(configuration);
        }
예제 #30
0
 public static IRevoConfiguration OverrideModuleLoading <TModule>(this IRevoConfiguration configuration,
                                                                  bool isLoaded,
                                                                  Action <KernelConfigurationSection> advancedAction = null) where TModule : INinjectModule
 {
     return(OverrideModuleLoading(configuration, typeof(TModule), isLoaded, advancedAction));
 }