public PlatformNancyBootstrapper(ILifetimeScope scopedKernel) { ScopedKernel = scopedKernel; RootPathProvider = new WwwrootPathProvider(); Logger = scopedKernel.Resolve <IPlatformLogger>(); Configuration = scopedKernel.Resolve <REstateConfiguration>(); }
public static void Main(string[] args) { var configuration = new ConfigurationBuilder() .AddJsonFile("appconfig.json") .Build(); var config = new REstateConfiguration(); configuration.GetSection("REstate").Bind(config); var logger = new LoggerConfiguration() .WriteTo.Logentries("123e94f6-51c3-4038-89f3-804e23b67414") .CreateLogger(); var containerBuilder = new ContainerBuilder(); var container = RegisterComponents(containerBuilder, configuration, config, logger); var host = new WebHostBuilder() .UseConfiguration(configuration) .UseContentRoot(Directory.GetCurrentDirectory()) .UseKestrel() .UseIISIntegration() .Configure(app => { app.UseDeveloperExceptionPage(new DeveloperExceptionPageOptions { }); app.UseOwin(owin => { var authenticationSettings = config.Authentication; if (authenticationSettings.UseAuthentication) { owin((next) => new JwtAndCookieMiddleware(next, new Options { Certificate = new X509Certificate2( Path.Combine( Directory.GetCurrentDirectory(), authenticationSettings.TokenEncryptionCertificate.FileName), authenticationSettings.TokenEncryptionCertificate.PrivateKeyPassword), CookieName = authenticationSettings.CookieName, CookiePath = "/", CookieHttpOnly = true, TokenLifeSpan = TimeSpan.FromMinutes(authenticationSettings.TokenLifeSpanMinutes), ClaimsPrincipalResourceName = authenticationSettings.ClaimsPrincipalResourceName, CreatePrincipal = (payload) => CreateClaimsPrincipalFromPayload(container.Resolve <StringSerializer>(), payload) }).Invoke); } owin.UseNancy(o => { o.Bootstrapper = authenticationSettings.UseAuthentication ? new PlatformJwtNancyBootstrapper(container) : new PlatformNancyBootstrapper(container); }); }); }) .Build(); var chronoConsumer = container.Resolve <ChronoConsumer>(); using (CancellationTokenSource chronoConsumerSource = new CancellationTokenSource()) { //Start the Consumer thread and hold a reference to the task. var chronoTask = chronoConsumer.StartAsync(config.Authentication.SchedulerApiKey, chronoConsumerSource.Token); //Running web layer, blocking call. host.Run(); //Request work to stop. chronoConsumerSource.Cancel(); //Wait for work to finish before exiting. chronoTask.Wait(); } }
private static IContainer RegisterComponents(ContainerBuilder containerBuilder, IConfigurationRoot configurationSource, REstateConfiguration config, ILogger logger) { //rabbitmq connection factory containerBuilder.RegisterInstance(new ConnectionFactory() { Uri = configurationSource.GetSection("RabbitMQ").GetValue <string>("AmqpUri") }); //nancy binders containerBuilder.RegisterType <JsonOnlyStringDictionaryBinder>().As <IModelBinder>(); //configuration containerBuilder.RegisterInstance(config); //serilog + adapter containerBuilder.RegisterInstance(logger).As <ILogger>(); containerBuilder.RegisterAdapter <ILogger, IPlatformLogger>((serilogLogger) => new SerilogLoggingAdapter(serilogLogger)); //simplejson serializer containerBuilder.RegisterType <SimpleJsonSerializer>().As <StringSerializer>(); //repositories containerBuilder.Register((ctx) => new ChronoRepositoryFactory( config.ConnectionStrings.Scheduler)) .As <IChronoRepositoryFactory>(); containerBuilder.Register((ctx) => new RepositoryContextFactory( config.ConnectionStrings.Engine, ctx.Resolve <StringSerializer>(), ctx.Resolve <IPlatformLogger>())) .As <IRepositoryContextFactory>(); containerBuilder.Register((ctx) => new AuthRepositoryFactory(config.ConnectionStrings.Auth)) .As <IAuthRepositoryFactory>(); //API containerBuilder.RegisterType <REstateMachineFactory>().As <IStateMachineFactory>(); containerBuilder.RegisterType <StateEngineFactory>(); //connectors containerBuilder.RegisterType <DirectChronoTriggerConnectorFactory>().As <IConnectorFactory>(); containerBuilder.RegisterType <RabbitMqConnectorFactory>().As <IConnectorFactory>(); //connector resolver containerBuilder.Register((ctx) => new DefaultConnectorFactoryResolver(ctx.Resolve <IEnumerable <IConnectorFactory> >())) .As <IConnectorFactoryResolver>(); //diagram service (cartographer) containerBuilder.RegisterInstance(new DotGraphCartographer()).AsSelf(); //delay processor (chronoconsumer) containerBuilder.RegisterType <DirectChronoConsumer>().As <ChronoConsumer>(); containerBuilder.RegisterType <TriggerSchedulerFactory>(); return(containerBuilder.Build()); }