public GraphStoreTests()
        {
            var configuration      = MockBuilder.BuildConfiguration();
            var graphClientFactory = new GraphClientFactory(NeoServerConfiguration.GetConfiguration(new Uri($"{configuration.GraphStore.Url}/db/data"), configuration.GraphStore.Username, configuration.GraphStore.Password));

            _graphStore = new GraphStore(graphClientFactory.Create(), false);
        }
Exemplo n.º 2
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            //Adding GraphClient
            services.AddSingleton <IGraphClientFactory>(factory =>
                                                        new GraphClientFactory(
                                                            NeoServerConfiguration.GetConfiguration(new Uri(Configuration["Graph:Uri"]), Configuration["Graph:Username"], Configuration["Graph:Password"])
                                                            ));

            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

            //Adding Configuration
            services.AddSingleton(Configuration);

            //Adding Swagger
            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new Info {
                    Title = "Contraindicator API", Version = "v1"
                });
            });

            //Adding Logging
            services.AddLogging();

            //Adding GraphClientRepository
            services.AddScoped <IGraphClientRepository, GraphClientRepository>();

            //Adding Seed Data
            services.AddTransient <IGraphClientSeedData, GraphClientSeedData>();
        }
Exemplo n.º 3
0
        public static void ConfigureGraphAccess(this IServiceCollection services)
        {
            services.AddSingleton(c =>
                                  NeoServerConfiguration.GetConfiguration(new Uri("http://localhost:7474/db/data"), "neo4j", "MeLikeGraph"
                                                                          ));

            services.AddSingleton <IGraphClientFactory, GraphClientFactory>();
            services.AddSingleton <IUserConnectionsRepository, UserConnectionsRepository>();
        }
Exemplo n.º 4
0
 public static void Configure(IServiceCollection services, IConfiguration config)
 {
     services.AddSingleton(
         NeoServerConfiguration.GetConfiguration(
             new Uri(config.GetConnectionString("WorldBuilder")),
             config["BlackFolderGames:Authentication:Neo4j:Username"],
             config["BlackFolderGames:Authentication:Neo4j:Password"]));
     services.AddSingleton <IGraphClientFactory, GraphClientFactory>();
     services.AddScoped <IWorldBuilderRepository, WorldBuilderRepository>();
 }
Exemplo n.º 5
0
        protected override void Load(ContainerBuilder builder)
        {
            Assembly assembly = typeof(LibraryModule).Assembly;

            // if (_environment.IsDevelopment())
            // {
            //     builder.RegisterAssemblyTypes(assembly)
            //         .Where(t => t.Name.StartsWith("Mock")
            //             && !t.IsInterface
            //             && t.Name.EndsWith("Processor"))
            //         .AsImplementedInterfaces()
            //         .InstancePerLifetimeScope();

            //     builder.RegisterAssemblyTypes(assembly)
            //         .Where(t => t.Name.StartsWith("Mock")
            //             && !t.IsInterface
            //             && t.Name.EndsWith("Manager"))
            //         .AsImplementedInterfaces()
            //         .SingleInstance();
            // }

            builder.RegisterAssemblyTypes(assembly)
            .Where(t => !t.Name.StartsWith("Mock") &&
                   !t.IsInterface &&
                   t.Name.EndsWith("Processor"))
            .AsImplementedInterfaces()
            .InstancePerLifetimeScope();

            builder.RegisterAssemblyTypes(assembly)
            .Where(t => !t.Name.StartsWith("Mock") &&
                   !t.IsInterface &&
                   t.Name.EndsWith("Manager"))
            .AsImplementedInterfaces()
            .SingleInstance();

            builder.Register(context =>
            {
                var neo4jOptions = context.Resolve <IOptionsSnapshot <Neo4jOptions> >();

                return(NeoServerConfiguration.GetConfiguration(new Uri(neo4jOptions.Value.Uri), neo4jOptions.Value.UserName, neo4jOptions.Value.Password));
            })
            .SingleInstance();

            builder.RegisterType <GraphClientFactory>()
            .As <IGraphClientFactory>()
            .SingleInstance();

            builder.RegisterType <ProjectReferencesContext>().SingleInstance();
            builder.RegisterType <DocumentContext>().SingleInstance();
        }
Exemplo n.º 6
0
        public static NeoClient Create()
        {
            if (_neoClient == null)
            {
                _neoClient = new NeoClient();

                NeoServerConfiguration config = NeoServerConfiguration.GetConfiguration(
                    new Uri("https://hobby-cbepnjdfkcnpgbkeccdhepbl.dbs.graphenedb.com:24780/db/data/"), "serviceuser",
                    "b.oTEvTxwdQmJa.8MkxAIV51kGfdcFu");
                IGraphClientFactory factory = new GraphClientFactory(config);

                _neoClient._client = factory.Create();
            }

            return(_neoClient);
        }
Exemplo n.º 7
0
        public async Task Test1()
        {
            var graphClientFactory = new GraphClientFactory(
                NeoServerConfiguration.GetConfiguration(
                    new Uri("http://localhost:32772/db/data"),
                    "neo4j",
                    "Password1"));
            var timeTreeFactory = new TimeTreeServiceFactory(graphClientFactory, new TimeTreeConfiguration());
            var timeTreeService = timeTreeFactory.Create();

            var date = DateTimeOffset.UtcNow;

            for (var index = 0; index < 100; ++index)
            {
                await timeTreeService.Get(date).ConfigureAwait(true);

                date = date.AddSeconds(18).AddMinutes(14).AddHours(1.3).AddDays(2.3);
            }
        }
Exemplo n.º 8
0
        public void ShouldThrowExceptionIfRootApiIsNotDefined()
        {
            using (var testHarness = new RestTestHarness
            {
                { MockRequest.Get("/"), new MockResponse {
                      StatusCode = HttpStatusCode.OK
                  } }
            })
            {
                var httpClient = testHarness.GenerateHttpClient(testHarness.BaseUri);

                var executeConfiguration = new ExecutionConfiguration
                {
                    HttpClient = httpClient,
                    UserAgent  =
                        string.Format("Neo4jClient/{0}", typeof(NeoServerConfiguration).Assembly.GetName().Version),
                    UseJsonStreaming = true,
                    JsonConverters   = GraphClient.DefaultJsonConverters
                };

                NeoServerConfiguration.GetConfiguration(new Uri(testHarness.BaseUri), null, null, executeConfiguration);
            }
        }
Exemplo n.º 9
0
        public async Task GraphClientFactoryUseCase()
        {
            const string queryText = @"RETURN d";

            var cypherQuery    = new CypherQuery(queryText, new Dictionary <string, object>(), CypherResultMode.Set, CypherResultFormat.Rest, "neo4j");
            var cypherApiQuery = new CypherStatementList {
                new CypherTransactionStatement(cypherQuery)
            };

            using (var testHarness = new RestTestHarness
            {
                { MockRequest.Get("/"), MockResponse.NeoRoot20() },
                { MockRequest.PostObjectAsJson("/transaction/commit", cypherApiQuery), new MockResponse {
                      StatusCode = HttpStatusCode.OK
                  } }
            })
            {
                var httpClient = testHarness.GenerateHttpClient(testHarness.BaseUri);

                var executeConfiguration = new ExecutionConfiguration
                {
                    HttpClient       = httpClient,
                    UserAgent        = $"Neo4jClient/{typeof(NeoServerConfiguration).Assembly.GetName().Version}",
                    UseJsonStreaming = true,
                    JsonConverters   = GraphClient.DefaultJsonConverters
                };

                var configuration = await NeoServerConfiguration.GetConfigurationAsync(new Uri(testHarness.BaseUri), null, null, null, null, executeConfiguration);

                var factory = new GraphClientFactory(configuration);

                using (var client = await factory.CreateAsync(httpClient))
                {
                    await client.Cypher.Return <object>("d").ExecuteWithoutResultsAsync();
                }
            }
        }
        private void RegisterGraphStore(ILogger logger)
        {
            var verifier = new ProviderVerifier();

            if (_configuration.GraphStore == null ||
                string.IsNullOrEmpty(_configuration.GraphStore?.Url) ||
                !verifier.IsGraphServiceRunning(_configuration.GraphStore?.Url,
                                                _configuration.GraphStore?.Username,
                                                _configuration.GraphStore?.Password,
                                                logger))
            {
                _autofacContainerBuilder.RegisterType <NullGraphStore>()
                .As <IGraphStore>()
                .SingleInstance();
                return;
            }

            _autofacContainerBuilder.Register(context => NeoServerConfiguration.GetConfiguration(new Uri($"{_configuration.GraphStore.Url}/db/data"),
                                                                                                 _configuration.GraphStore.Username,
                                                                                                 _configuration.GraphStore.Password))
            .SingleInstance();

            _autofacContainerBuilder.RegisterType <GraphClientFactory>()
            .As <IGraphClientFactory>()
            .SingleInstance();

            _autofacContainerBuilder.Register(ctx =>
            {
                var transactionContext = AmbientTransactionContext.Current;
                var unitOfWork         = (UnitOfWork)transactionContext?.Items["UnitOfWork"];

                return(unitOfWork != null ? unitOfWork.GraphStore :
                       new GraphStore(ctx.Resolve <IGraphClientFactory>().Create(), false));
            })
            .As <IGraphStore>()
            .InstancePerLifetimeScope();
        }
Exemplo n.º 11
0
        public void GraphClientFactoryUseCase()
        {
            const string queryText = @"MATCH (d) RETURN d";

            var cypherQuery    = new CypherQuery(queryText, null, CypherResultMode.Set, CypherResultFormat.Rest);
            var cypherApiQuery = new CypherApiQuery(cypherQuery);

            using (var testHarness = new RestTestHarness
            {
                { MockRequest.Get("/"), MockResponse.NeoRoot() },
                { MockRequest.PostObjectAsJson("/cypher", cypherApiQuery), new MockResponse {
                      StatusCode = HttpStatusCode.OK
                  } }
            })
            {
                var httpClient = testHarness.GenerateHttpClient(testHarness.BaseUri);

                var executeConfiguration = new ExecutionConfiguration
                {
                    HttpClient = httpClient,
                    UserAgent  =
                        string.Format("Neo4jClient/{0}", typeof(NeoServerConfiguration).Assembly.GetName().Version),
                    UseJsonStreaming = true,
                    JsonConverters   = GraphClient.DefaultJsonConverters
                };

                var configuration = NeoServerConfiguration.GetConfiguration(new Uri(testHarness.BaseUri), null, null, executeConfiguration);

                var factory = new GraphClientFactory(configuration);

                using (var client = factory.Create(httpClient))
                {
                    client.Cypher.Match("(d)").Return <object>("d").ExecuteWithoutResults();
                }
            }
        }
Exemplo n.º 12
0
        public async Task ShouldThrowExceptionIfRootApiIsNotDefined()
        {
            using (var testHarness = new RestTestHarness
            {
                { MockRequest.Get("/"), new MockResponse {
                      StatusCode = HttpStatusCode.OK
                  } }
            })
            {
                var httpClient = testHarness.GenerateHttpClient(testHarness.BaseUri);

                var executeConfiguration = new ExecutionConfiguration
                {
                    HttpClient       = httpClient,
                    UserAgent        = $"Neo4jClient/{typeof(NeoServerConfiguration).Assembly.GetName().Version}",
                    UseJsonStreaming = true,
                    JsonConverters   = GraphClient.DefaultJsonConverters
                };

                await Assert.ThrowsAsync <InvalidOperationException>(async() => await NeoServerConfiguration.GetConfigurationAsync(new Uri(testHarness.BaseUri), null, null, null, null, executeConfiguration));
            }
        }
Exemplo n.º 13
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
            // In production, the React files will be served from this directory
            services.AddSpaStaticFiles(configuration =>
            {
                configuration.RootPath = "ClientApp/build";
            });

            //GraphClient client = new GraphClient(new Uri("http://localhost:7474/db/data"), "neo4j", "misahaker69");
            //client.Connect();
            //services.AddSingleton<IGraphClient>(provider => client);
            services.AddSingleton <IGraphClientFactory>(provider => new GraphClientFactory(NeoServerConfiguration.GetConfiguration(new Uri("http://localhost:7474/db/data"), "neo4j", "misacringeboy")));
            services.AddSingleton <IRedisClientsManager>(c => new RedisManagerPool("127.0.0.1:6379"));


            services.AddScoped <NotificationService, NotificationService>();
            services.AddScoped <RedisMessageService, RedisMessageService>();
            services.AddScoped <IUserRepository, UserRepoistory>();
            services.AddScoped <IPostRepository, PostRepository>();


            services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
            .AddJwtBearer(options =>
            {
                options.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidateIssuerSigningKey = true,
                    IssuerSigningKey         = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(Configuration.GetSection("AppSettings:Token").Value)),
                    RequireExpirationTime    = true,
                    ValidateLifetime         = true,
                    ClockSkew        = TimeSpan.FromMinutes(0),
                    ValidateIssuer   = false,
                    ValidateAudience = false
                };
            });

            services.AddSignalR();
        }
Exemplo n.º 14
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public IServiceProvider ConfigureServices(IServiceCollection services)
        {
            RegisterAppInsights(services);

            services
            .AddCustomHealthCheck(Configuration)
            .AddMvc(options =>
            {
                options.Filters.Add(typeof(HttpGlobalExceptionFilter));
            })
            .SetCompatibilityVersion(CompatibilityVersion.Version_2_2)
            .AddXmlSerializerFormatters()
            .AddControllersAsServices();

            services.Configure <PagesSettings>(Configuration);

            ConfigureAuthService(services);

            if (Configuration.GetValue <bool>("AzureServiceBusEnabled"))
            {
                services.AddSingleton <IServiceBusPersisterConnection>(sp =>
                {
                    var logger = sp.GetRequiredService <ILogger <DefaultServiceBusPersisterConnection> >();

                    var serviceBusConnectionString = Configuration["EventBusConnection"];
                    var serviceBusConnection       = new ServiceBusConnectionStringBuilder(serviceBusConnectionString);

                    return(new DefaultServiceBusPersisterConnection(serviceBusConnection, logger));
                });
            }
            else
            {
                services.AddSingleton <IRabbitMQPersistentConnection>(sp =>
                {
                    var logger = sp.GetRequiredService <ILogger <DefaultRabbitMQPersistentConnection> >();

                    var factory = new ConnectionFactory()
                    {
                        HostName = Configuration["EventBusConnection"]
                    };

                    if (!string.IsNullOrEmpty(Configuration["EventBusUserName"]))
                    {
                        factory.UserName = Configuration["EventBusUserName"];
                    }

                    if (!string.IsNullOrEmpty(Configuration["EventBusPassword"]))
                    {
                        factory.Password = Configuration["EventBusPassword"];
                    }

                    var retryCount = 5;
                    if (!string.IsNullOrEmpty(Configuration["EventBusRetryCount"]))
                    {
                        retryCount = int.Parse(Configuration["EventBusRetryCount"]);
                    }

                    return(new DefaultRabbitMQPersistentConnection(factory, logger, retryCount));
                });
            }

            // Add framework services.
            services.AddSwaggerGen(options =>
            {
                options.DescribeAllEnumsAsStrings();
                options.SwaggerDoc("v1", new Swashbuckle.AspNetCore.Swagger.Info
                {
                    Title          = "Pages HTTP API",
                    Version        = "v1",
                    Description    = "The Pages Service HTTP API",
                    TermsOfService = "Terms Of Service"
                });

                options.AddSecurityDefinition("oauth2", new OAuth2Scheme
                {
                    Type             = "oauth2",
                    Flow             = "implicit",
                    AuthorizationUrl = $"{Configuration.GetValue<string>("IdentityUrlExternal")}/connect/authorize",
                    TokenUrl         = $"{Configuration.GetValue<string>("IdentityUrlExternal")}/connect/token",
                    Scopes           = new Dictionary <string, string>()
                    {
                        { "pages", "Pages API" }
                    }
                });

                options.OperationFilter <AuthorizeCheckOperationFilter>();
            });

            services.AddCors(options =>
            {
                options.AddPolicy("CorsPolicy",
                                  builder => builder
                                  //.SetIsOriginAllowed((host) => true)
                                  .AllowAnyOrigin()
                                  .AllowAnyMethod()
                                  .AllowAnyHeader()
                                  .AllowCredentials());
            });

            RegisterEventBus(services);

            services.AddSingleton <NeoServerConfiguration>(provider => {
                return(NeoServerConfiguration
                       .GetConfiguration(new Uri(Configuration.GetValue <string>("Neo4jConnectionString")), "neo4j", "password"));
            });

            services.AddSingleton <IGraphClientFactory, GraphClientFactory>();
            services.AddSingleton <PagesContext, PagesContext>();
            services.AddTransient <IPageRepository, PageRepository>();
            services.AddTransient <IPageService, PageService>();
            services.AddTransient <IZoneRepository, ZoneRepository>();
            services.AddTransient <IZoneService, ZoneService>();
            services.AddSingleton <IHttpContextAccessor, HttpContextAccessor>();
            services.AddTransient <IIdentityService, IdentityService>();

            services.AddOptions();

            //configure autofac
            var container = new ContainerBuilder();

            container.Populate(services);

            return(new AutofacServiceProvider(container.Build()));
        }
Exemplo n.º 15
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.Configure <CookiePolicyOptions>(options =>
            {
                // This lambda determines whether user consent for non-essential cookies is needed for a given request.
                options.CheckConsentNeeded    = context => true;
                options.MinimumSameSitePolicy = SameSiteMode.None;
            });

            services.AddSingleton(_ => Configuration);


            services.AddDbContext <ApplicationDbContext>(options =>
                                                         options.UseSqlServer(
                                                             Configuration.GetConnectionString("Authentication")));

            services.AddDefaultIdentity <IdentityUser>()
            .AddEntityFrameworkStores <ApplicationDbContext>();

            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

            services.AddAuthentication().AddGoogle(g =>
            {
                g.ClientId     = Configuration["BlackFolderGames:Authentication:Google:ClientId"];
                g.ClientSecret = Configuration["BlackFolderGames:Authentication:Google:ClientSecret"];
                string scopes  = Configuration["BlackFolderGames:Authentication:Google:Scopes"];
                if (!string.IsNullOrEmpty(scopes))
                {
                    foreach (string scope in scopes.Split('|'))
                    {
                        g.Scope.Add(scope);
                    }
                }
            });

            services.AddAuthorization(options =>
            {
                options.AddPolicy("CanEditClaims", policy =>
                                  policy.RequireAssertion(context =>
                                                          context.User.HasClaim(c =>
                                                                                c.Issuer == "LOCAL AUTHORITY" &&
                                                                                c.Type == "CanEditClaims")));

                options.AddPolicy("CanViewUsers", policy =>
                                  policy.RequireAssertion(context =>
                                                          context.User.HasClaim(c =>
                                                                                c.Issuer == "LOCAL AUTHORITY" &&
                                                                                c.Type == "CanViewUsers")));

                options.AddPolicy("CanSuspendUsers", policy =>
                                  policy.RequireAssertion(context =>
                                                          context.User.HasClaim(c =>
                                                                                c.Issuer == "LOCAL AUTHORITY" &&
                                                                                c.Type == "CanSuspendUsers")));

                options.AddPolicy("CanBanUsers", policy =>
                                  policy.RequireAssertion(context =>
                                                          context.User.HasClaim(c =>
                                                                                c.Issuer == "LOCAL AUTHORITY" &&
                                                                                c.Type == "CanBanUsers")));
            });

            services.AddSingleton <NeoServerConfiguration>(
                context => NeoServerConfiguration.GetConfiguration(
                    new Uri(Configuration["BlackFolderGames:WorldBuilder:Uri"])
                    , Configuration["BlackFolderGames:WorldBuilder:User"]
                    , Configuration["BlackFolderGames:WorldBuilder:Password"]));
            services.AddSingleton <IGraphClientFactory, GraphClientFactory>();
            services.AddSingleton <IImageServiceFactory, ImageServiceFactory>();

            services.AddScoped <IUserRepository, UserRepository>();
            services.AddScoped <IWorldBuilderRepository, WorldBuilderRepository>();
            services.AddScoped <IWorldService, WorldService>();
        }
Exemplo n.º 16
0
 public new void Connect(NeoServerConfiguration configuration = null)
 {
 }
Exemplo n.º 17
0
        public static void Initialize()
        {
            #region Neo4j

            _container.RegisterType <NeoServerConfiguration>(new ContainerControlledLifetimeManager(), new InjectionFactory(o => NeoServerConfiguration.GetConfiguration(new Uri(Settings.Default.Neo4jServerUrl), Settings.Default.Neo4jUserName, Settings.Default.Neo4jPassword)));

            _container.RegisterType <IGraphClientFactory, GraphClientFactory>(new ContainerControlledLifetimeManager());

            _container.RegisterType <IUnitOfWorkFactory, UnitOfWorkFactory>(new ContainerControlledLifetimeManager());

            #endregion

            #region NHibernate

            _container.RegisterInstance(NHibernateConfiguration.SessionFactory, new ContainerControlledLifetimeManager());

            #endregion

            #region AOP

            #region Call Handlers

            _container.RegisterType <ICallHandler, LoggingCallHandler>(typeof(LoggingCallHandler).Name, new ContainerControlledLifetimeManager(), new InjectionProperty(nameof(LoggingCallHandler.Order), 1));

            _container.RegisterType <ICallHandler, TransactionCallHandler>(typeof(TransactionCallHandler).Name, new ContainerControlledLifetimeManager(), new InjectionProperty(nameof(TransactionCallHandler.Order), 2));

            #endregion

            #region Controllers Interception

            _container.AddNewExtension <Interception>();

            Interception interception = _container.Configure <Interception>();

            Assembly.GetExecutingAssembly().GetTypes().Where(o => o.IsSubclassOf(typeof(ApiController))).ToList().ForEach(o => interception.SetInterceptorFor(o, new VirtualMethodInterceptor()));

            #endregion

            #endregion

            #region DAOs

            _container.RegisterType <IUserDao>(new ContainerControlledLifetimeManager(), new InjectionFactory(o =>
            {
                var dao = new UserDao();

                dao.SetSessionFactory(NHibernateConfiguration.SessionFactory);

                return(dao);
            }));

            #endregion

            #region Validators

            _container.RegisterType <CreateHotSpotInputDtoValidator>(new ContainerControlledLifetimeManager());

            _container.RegisterType <CreateRefugeeInputDtoValidator>(new ContainerControlledLifetimeManager());

            _container.RegisterType <UpdateRefugeeInputDtoValidator>(new ContainerControlledLifetimeManager());

            _container.RegisterType <UpdateRefugeeInputDtoValidator>(new ContainerControlledLifetimeManager());

            _container.RegisterType <AuthenticationInputDtoValidator>(new ContainerControlledLifetimeManager());

            _container.RegisterType <CreateRefugeesFamilyRelationshipInputDtoValidator>(new ContainerControlledLifetimeManager());

            #endregion

            #region Utilities

            _container.RegisterType <ICurrentHttpRequest, CurrentHttpRequest>(new ContainerControlledLifetimeManager());

            #endregion
        }
Exemplo n.º 18
0
        static void Main(string[] args)
        {
            BasicConfigurator.Configure();
            var builder = new ContainerBuilder();

            builder.Register(context => NeoServerConfiguration.GetConfiguration(new Uri("http://localhost:7474/db/data"), "neo4j", "falcons"))
            .SingleInstance();

            builder.RegisterType <GraphClientFactory>()
            .As <IGraphClientFactory>()
            .SingleInstance();

            builder.Register(cc => new WriteDatabase(cc.Resolve <IGraphClientFactory>()))
            .As <IWriteDb>()
            .SingleInstance();


            var assemblies       = AppDomain.CurrentDomain.GetAssemblies();
            var scheduledImports = new List <Type>();

            foreach (var assembly in assemblies)
            {
                var assemblyImports = (from t in assembly.GetTypes()
                                       where t.IsClass && !t.IsAbstract && t.IsSubclassOf(typeof(ScheduledImport))
                                       select t).ToList();
                scheduledImports.AddRange(assemblyImports);
            }

            foreach (var scheduledImport in scheduledImports)
            {
                builder.RegisterType(scheduledImport)
                .Named <IScheduledImport>(scheduledImport.Name)
                .As <IScheduledImport>()
                .SingleInstance();
            }


            builder.Register(c => new DataImporter(c.Resolve <IEnumerable <IScheduledImport> >())).As <DataImporter>().SingleInstance();

            var container = builder.Build();

            HostFactory.Run(x =>
            {
                x.UseAutofacContainer(container);
                x.Service <DataImporter>(s =>
                {
                    s.ConstructUsingAutofacContainer();
                    s.WhenStarted(tc => tc.Start());
                    s.WhenStopped(tc => tc.Stop());

                    s.OwinEndpoint(app =>
                    {
                        app.Domain = "localhost";
                        app.Port   = 45678;
                        app.ConfigureAppBuilder(appBuilder =>
                        {
                            appBuilder.UseCors(CorsOptions.AllowAll);
                            appBuilder.UseAutofacMiddleware(container);
                            appBuilder.UseNancy(bt => bt.Bootstrapper = new NancyBootstrapper(container));
                        });
                    });
                });

                x.RunAsPrompt();
                x.SetDescription("Ballistic Reports UI");
                x.SetDisplayName("BallisticReports");
                x.SetServiceName("BallisticReports");
                x.StartAutomatically();
            });
        }