private void BuildAndVerifyModuleMock <TModule>(Mock <TModule> moduleMock, Container container = null) where TModule : class
        {
            var builder = ModulesHost.CreateDefaultBuilder();

            if (container == null)
            {
                builder.UseSimpleInjector();
            }
            else
            {
                builder.UseSimpleInjector(container);
            }

#if NETCOREAPP2_1
            builder.UseAspNetCore(WebHost.CreateDefaultBuilder, (module, webHostBuilder) => { });
#else
            builder.UseAspNetCore((module, webHostBuilder) => { });
#endif

            builder.HostModule <TModule>(
                options => options.ModuleFactoryCallback(_ => moduleMock.Object));

            builder.Build().Dispose();

            moduleMock.Verify();
        }
Example #2
0
        static Task Main(string[] args)
        {
            //this will create a ModulesHost - that is a host that hosts modules ;-)
            var builder = ModulesHost.CreateDefaultBuilder(args);

            // you can configure a module host builder like a host builder.
            // All configurations set with ConfigureAppConfiguration will be shared between all modules and the ModulesHost.

            //optional: here we add a ServiceCollection to build a DI container that is available for all modules.
            var sc = new ServiceCollection();

            sc.AddSingleton <IMessageDispatcher, MessageDispatcher>();

            builder.UseServiceCollection(sc);

            builder.HostModule <SampleWebModule>();

            //to host WebModules you have to call this once. Use it to configure
            //web host settings like ports.
            builder.UseAspNetCoreWithDefaults((module, webBuilder) =>
            {
            });

            var host = builder.Build();

            var test       = host.Services.GetService <IMessageDispatcher>();
            var module     = host.Services.GetService <SampleWebModule>();
            var moduleHost = host.Services.GetService <IModuleHost <SampleWebModule> >();

            return(host.RunAsync());
        }
Example #3
0
        public void Build_module_has_logger_from_host()
        {
            var builder = ModulesHost.CreateDefaultBuilder();

            var loggerMock = new Mock <ILogger>();

            loggerMock.Setup(x => x.Log(LogLevel.Trace,
                                        It.IsAny <EventId>(), null, It.IsAny <Exception>(),
                                        It.IsAny <Func <object, Exception, string> >())).Verifiable();

            var logProviderMoq = new Mock <ILoggerProvider>();

            logProviderMoq.Setup(x =>
                                 x.CreateLogger(It.IsAny <string>())).Returns(loggerMock.Object);

            builder.HostModule <SomeModule>();

            builder.ConfigureLogging(lb =>
                                     lb.SetMinimumLevel(LogLevel.Trace)
                                     .AddProvider(logProviderMoq.Object));

            var host = builder.Build();

            var moduleHost    = host.Services.GetRequiredService <IModuleHost <SomeModule> >();
            var loggerFactory = moduleHost.Services.GetRequiredService <ILoggerFactory>();
            var logger        = loggerFactory.CreateLogger("dummy");

            logger.Log <object>(LogLevel.Trace, new EventId(0), null, null, (s, e) => "trace message");

            loggerMock.Verify();
        }
Example #4
0
        public void AppConfiguration_is_applied_to_all_Configurations()
        {
            var builder = ModulesHost.CreateDefaultBuilder();

            builder.HostModule <SomeWebModule>();
#if !NETCOREAPP2_1
            builder.UseAspNetCore();
#endif
            builder.ConfigureHostConfiguration(c =>
                                               c.AddInMemoryCollection(new Dictionary <string, string>
            {
                ["setting"] = "hostValue"
            }));
            builder.ConfigureAppConfiguration(c =>
                                              c.AddInMemoryCollection(new Dictionary <string, string>
            {
                ["setting"] = "appValue"
            }));

            var host       = builder.Build();
            var hostConfig = host.Services.GetRequiredService <IConfiguration>();
            var module     = host.Services.GetRequiredService <SomeWebModule>();
            Assert.Equal("appValue", hostConfig["setting"]);
            Assert.Equal("appValue", module.HostConfiguration["setting"]);
            Assert.Equal("appValue", module.Configuration["setting"]);
        }
Example #5
0
        static Task Main(string[] args)
        {
            var builder = ModulesHost.CreateDefaultBuilder(args);

            // you can configure a module host builder like a host builder.
            // All configurations set with ConfigureHostConfiguration will be shared between all modules.
            builder.UseEnvironment(Environments.Development);

            //here we add a ServiceCollection to build a DI container that is available for all modules.
            var sc = new ServiceCollection();

            sc.AddSingleton <IMessageDispatcher, MessageDispatcher>();
            builder.UseServiceCollection(sc);

            builder.HostModule <SampleWebModule>();
            builder.UseAspNetCoreWithDefaults((module, webBuilder) =>
            {
            });
            var host       = builder.Build();
            var test       = host.Services.GetService <IMessageDispatcher>();
            var module     = host.Services.GetService <SampleWebModule>();
            var moduleHost = host.Services.GetService <IModuleHost <SampleWebModule> >();

            return(host.RunAsync());
        }
Example #6
0
        private static Task Main(string[] args)
        {
            var container = new Container();

            container.Bootstrap();

            return(ModulesHost.CreateDefaultBuilder(args)
                   .UseSimpleInjector(container)
                   .RunModule <VmHostAgentModule>());
        }
Example #7
0
        public void Module_uses_SimpleInjector_as_inner_container()
        {
            var builder = ModulesHost.CreateDefaultBuilder();

            builder.UseSimpleInjector();
            builder.HostModule <SomeModule>();
            var host       = builder.Build();
            var moduleHost = host.Services.GetRequiredService <IModuleHost <SomeModule> >();

            Assert.IsType <Container>(moduleHost.ModuleContext.Services);
            host.Dispose();
        }
Example #8
0
        public void Build_module_has_environment_of_host(string environmentName)
        {
            var builder = ModulesHost.CreateDefaultBuilder();

            builder.HostModule <SomeModule>();
            builder.UseEnvironment(environmentName);
            var host = builder.Build();

            var module = host.Services.GetRequiredService <SomeModule>();

            Assert.Equal(environmentName, module.Environment);
        }
Example #9
0
        public void Multiple_modules_can_be_bootstrapped_and_see_each_other()
        {
            var builder = ModulesHost.CreateDefaultBuilder();

            builder.HostModule <SomeModule>();
            builder.HostModule <OtherModule>();

            var host   = builder.Build();
            var module = host.Services.GetRequiredService <OtherModule>();

            Assert.NotNull(module.SomeModule);
        }
Example #10
0
        public static async Task Main(string[] args)
        {
            var container = new Container();

            container.Bootstrap();

            await ModulesHost.CreateDefaultBuilder(args)
            .UseSimpleInjector(container)
            .UseAspNetCore((module, webHostBuilder) =>
            {
            })
            .RunModule <IdentityModule>();
        }
Example #11
0
        public void Configuration_is_applied_in_order(string firstValue,
                                                      string secondValue, string moduleValue, string hostExpected, string moduleExpected)
        {
            var builder = ModulesHost.CreateDefaultBuilder();

            builder.ConfigureAppConfiguration(c =>
                                              c.AddInMemoryCollection(new Dictionary <string, string>
            {
                ["setting"] = firstValue
            }));

            builder.HostModule <SomeWebModule>(options =>
            {
                if (moduleValue != null)
                {
                    options.Configure(mb =>
                    {
                        mb.ConfigureAppConfiguration(c =>
                                                     c.AddInMemoryCollection(new Dictionary <string, string>
                        {
                            ["setting"] = moduleValue
                        }));
                    });
                }
            });
#if !NETCOREAPP2_1
            builder.ConfigureWebHost(cfg => { });
#endif
            builder.ConfigureHostConfiguration(c =>
                                               c.AddInMemoryCollection(new Dictionary <string, string>
            {
                ["setting"] = "should never be seen"
            }));

            if (secondValue != null)
            {
                builder.ConfigureAppConfiguration(c =>
                                                  c.AddInMemoryCollection(new Dictionary <string, string>
                {
                    ["setting"] = secondValue
                }));
            }


            var host   = builder.Build();
            var module = host.Services.GetRequiredService <SomeWebModule>();


            Assert.Equal(hostExpected, module.HostConfiguration["setting"]);
            Assert.Equal(moduleExpected, module.Configuration["setting"]);
        }
Example #12
0
        /// <summary>
        /// The Main
        /// </summary>
        /// <param name="args">The args<see cref="string[]"/></param>
        private static Task Main(string[] args)
        {
            ConfigStore.Config.EnsureConfigPaths();
            ConfigStore.Clients.ClientGenerator.EnsureSystemClient();

            File.WriteAllText(Path.Combine(ConfigStore.Config.GetConfigPath("zero"), ".run_info"),
                              $"{{ \"process_id\": \"{Process.GetCurrentProcess().Id}\", \"url\" : \"https://localhost:62189\" }}");

            Certificate.CreateSSL(new CertificateOptions
            {
                Issuer          = Network.FQDN,
                FriendlyName    = "Haipa Zero Management Certificate",
                Suffix          = "CA",
                ValidStartDate  = DateTime.UtcNow,
                ValidEndDate    = DateTime.UtcNow.AddYears(5),
                Password        = "******",
                ExportDirectory = Directory.GetCurrentDirectory(),
                URL             = "https://localhost:62189/",
                AppID           = "9412ee86-c21b-4eb8-bd89-f650fbf44931",
                CACertName      = "HaipaCA.pfx"
            });

            var container = new Container();

            container.Options.DefaultScopedLifestyle = new AsyncScopedLifestyle();
            container.Bootstrap();

            var host = ModulesHost.CreateDefaultBuilder(args)
                       .UseAspNetCore((module, webHostBuilder) =>
            {
                webHostBuilder.UseHttpSys(options =>
                {
                    options.UrlPrefixes.Add($"https://localhost:62189/{module.Path}");
                })
                .UseUrls($"https://localhost:62189/{module.Path}");
            })
                       .UseSimpleInjector(container)
                       .HostModule <ApiModule>()
                       .AddIdentityModule(container)
                       .HostModule <VmHostAgentModule>()
                       .HostModule <ControllerModule>()


                       .UseEnvironment("Development")
                       .ConfigureLogging(lc => lc.SetMinimumLevel(LogLevel.Trace))
                       .Build();

            return(host.RunAsync());
        }
Example #13
0
        public static async Task Main(string[] args)
        {
            await MySqlConnectionCheck.WaitForMySql(new TimeSpan(0, 1, 0)).ConfigureAwait(false);

            var container = new Container();

            container.Bootstrap();

            await ModulesHost.CreateDefaultBuilder(args)
            .UseSimpleInjector(container)
            .UseAspNetCore((module, webHostBuilder) =>
            {
            })
            .RunModule <ApiModule>();
        }
        public void Module_can_resolve_services_from_outer_container()
        {
            var sc          = new ServiceCollection();
            var serviceMock = new Mock <IService>();

            serviceMock.Setup(x => x.CallMe()).Verifiable();
            sc.AddSingleton(serviceMock.Object);

            var builder = ModulesHost.CreateDefaultBuilder();

            builder.UseServiceCollection(sc);
            builder.HostModule <SomeModule>();
            var host = builder.Build();

            serviceMock.Verify(x => x.CallMe());
        }
Example #15
0
        public void ConfigureContainer_extensions_are_called()
        {
            var configureMock = new Mock <IConfigureContainerFilter <ModuleWithConfigureContainer> >();

            configureMock.Setup(x =>
                                x.Invoke(It.IsAny <Action <IModuleContext <ModuleWithConfigureContainer>, Container> >())
                                ).Verifiable();

            var builder = ModulesHost.CreateDefaultBuilder();

            builder.UseSimpleInjector();
            builder.HostModule <ModuleWithConfigureContainer>();
            builder.ConfigureFrameworkServices((ctx, services) => services.AddTransient(sp => configureMock.Object));
            builder.Build().Dispose();

            configureMock.Verify();
        }
Example #16
0
        public void Build_module_has_configuration_from_host()
        {
            var builder = ModulesHost.CreateDefaultBuilder();

            builder.HostModule <SomeModule>();
            builder.ConfigureAppConfiguration(c =>
                                              c.AddInMemoryCollection(new Dictionary <string, string>
            {
                ["test"] = "testValue"
            }));

            var host = builder.Build();

            var module = host.Services.GetRequiredService <SomeModule>();

            Assert.Equal("testValue", module.Configuration["test"]);
        }
Example #17
0
        static async Task Main(string[] args)
        {
            await MySqlConnectionCheck.WaitForMySql(new TimeSpan(0, 1, 0)).ConfigureAwait(false);

            var container = new Container();

            container.Bootstrap();

            await ModulesHost.CreateDefaultBuilder(args)
            .UseSimpleInjector(container)
            .HostModule <ControllerModule>(options => options.Configure((sp) =>
            {
                using (var scope = sp.CreateScope())
                    scope.ServiceProvider.GetService <StateStoreContext>().Database.Migrate();
            }))

            .RunConsoleAsync().ConfigureAwait(false);
        }
Example #18
0
        public void Module_dependencies_can_be_injected_from_host_container()
        {
            var builder = ModulesHost.CreateDefaultBuilder();

            builder.HostModule <ModuleWithConstructorInjection>();

            var depMock = Mock.Of <IDep>();
            var sc      = new ServiceCollection();

            sc.AddTransient(sp => depMock);

            builder.UseServiceCollection(sc);

            var host   = builder.Build();
            var module = host.Services.GetRequiredService <ModuleWithConstructorInjection>();

            Assert.Equal(depMock, module.Dependency);
        }
Example #19
0
        public void Module_dependencies_can_be_injected_from_outer_container()
        {
            var container = new Container();

            var builder = ModulesHost.CreateDefaultBuilder();

            builder.UseSimpleInjector(container);
            var serviceMock = Mock.Of <IService>();

            container.RegisterInstance(serviceMock);


            builder.HostModule <ModuleWithConstructorInjection>();

            var host   = builder.Build();
            var module = container.GetRequiredService <ModuleWithConstructorInjection>();

            Assert.Equal(module.Dependency, serviceMock);
        }
Example #20
0
        public void Module_can_resolve_services_from_outer_container()
        {
            var container = new Container();
            var builder   = ModulesHost.CreateDefaultBuilder();

            builder.UseSimpleInjector(container);

            var serviceMock = new Mock <IService>();

            serviceMock.Setup(x => x.CallMe()).Verifiable();
            container.RegisterInstance(serviceMock.Object);


            builder.HostModule <SomeModule>();
            builder.Build();
            var moduleHost = container.GetRequiredService <IModuleHost <SomeModule> >();

            serviceMock.Verify(x => x.CallMe());
        }
Example #21
0
        private void BuildAndVerifyModuleMock <TModule>(Mock <TModule> moduleMock, Container container = null) where TModule : class
        {
            var builder = ModulesHost.CreateDefaultBuilder();

            if (container == null)
            {
                builder.UseSimpleInjector();
            }
            else
            {
                builder.UseSimpleInjector(container);
            }

            builder.HostModule <TModule>(
                options => options.ModuleFactoryCallback(_ => moduleMock.Object));

            builder.Build().Dispose();

            moduleMock.Verify();
        }
Example #22
0
        public async Task ServiceHandler_in_Module_uses_SimpleInjector()
        {
            var container = new Container();

            var serviceMock = new Mock <IService>();

            serviceMock.Setup(x => x.CallMe()).Verifiable();


            var builder = ModulesHost.CreateDefaultBuilder();

            builder.UseSimpleInjector(container);
            container.RegisterInstance(serviceMock.Object);
            builder.HostModule <SomeModule>();

            var host = builder.Build();
            await host.StartAsync().ConfigureAwait(false);

            //await Task.Delay(2000).ConfigureAwait(false);

            serviceMock.Verify(x => x.CallMe());
            host.Dispose();
        }