示例#1
0
        public void DeclareDependencies(IServiceCollection services)
        {
            services.AddSingleton <IForroAppConfig>(x =>
            {
                var result = new ForroAppConfig
                {
                    AWSForroBucketName    = _forroAppConfig.AWSForroBucketName,
                    AWSRegionEndpoint     = _forroAppConfig.AWSRegionEndpoint,
                    ForroLevelSNSTopicArn = _forroAppConfig.ForroLevelSNSTopicArn
                };
                return(result);
            });

            services.AddScoped <ILoggerManager>(x =>
            {
                var forroAppConfig = x.GetService <IForroAppConfig>();
                var regionObject   = RegionEndpoint.GetBySystemName(forroAppConfig.AWSRegionEndpoint);

                var cloudWatchLogger = new CloudWatchLogger(regionObject);
                return(cloudWatchLogger);
            });
            services.AddScoped <IForroLevelService>(x =>
            {
                var forroAppConfig = x.GetService <IForroAppConfig>();
                var regionObject   = RegionEndpoint.GetBySystemName(forroAppConfig.AWSRegionEndpoint);

                var config = new AmazonDynamoDBConfig
                {
                    RegionEndpoint = regionObject,
                    Timeout        = new System.TimeSpan(0, 1, 0)
                };
                var client = new AmazonDynamoDBClient(config);

                var forroLevelRepository = new ForroLevelRepository(client);

                var s3Client          = new AmazonS3Client(regionObject);
                var loggerManager     = new CloudWatchLogger(regionObject);
                var forroLevelMessage = x.GetRequiredService <IForroLevelMessage>();

                var forroLevelService = new ForroLevelService(forroLevelRepository, s3Client, loggerManager,
                                                              forroLevelMessage,
                                                              forroAppConfig);

                return(forroLevelService);
            });

            services.AddScoped <IForroLevelMessage>(x =>
            {
                var forroAppConfig = x.GetService <IForroAppConfig>();
                var regionObject   = RegionEndpoint.GetBySystemName(forroAppConfig.AWSRegionEndpoint);

                //I will leave it hard-coded - maybe not optimum but suits my immediate needs.
                var forroLevelQueueName = "Paulo-Forro-SQS";

                var forroLevelMessage = new ForroLevelMessage(forroLevelQueueName, regionObject);
                return(forroLevelMessage);
            });
        }
示例#2
0
        /// <summary>
        /// Default constructor. This constructor is used by Lambda to construct the instance. When invoked in a Lambda environment
        /// the AWS credentials will come from the IAM role associated with the function and the AWS region will be set to the
        /// region the Lambda function is executed in.
        /// </summary>
        public ForroLevelLambda()
        {
            var forroAppConfig = new ForroAppConfig
            {
                AWSForroBucketName    = Environment.GetEnvironmentVariable("AWSForroBucketName"),
                AWSRegionEndpoint     = Environment.GetEnvironmentVariable("AWSRegionEndpoint"),
                ForroLevelSNSTopicArn = Environment.GetEnvironmentVariable("ForroLevelSNSTopicArn")
            };

            //Create Dependency Injection Container. Ideally I would use AutoFac, but this for now meets my expectations.
            _serviceCollection = new ServiceCollection();

            //_serviceCollection.
            var forroDependencyInjectionService = new ForroDependencyInjectionService(forroAppConfig);

            forroDependencyInjectionService.DeclareDependencies(_serviceCollection);

            var serviceProvider = _serviceCollection.BuildServiceProvider();

            _forroLevelService = serviceProvider.GetService <IForroLevelService>();
        }
示例#3
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);

            var forroAppConfig = new ForroAppConfig();

            Configuration.GetSection("ForroAppConfig").Bind(forroAppConfig);

            var forroDependencyInjectionService = new ForroDependencyInjectionService(forroAppConfig);

            forroDependencyInjectionService.DeclareDependencies(services);

            var serviceProvider = services.BuildServiceProvider();
            var nLogConfig      = new NLogConfig(serviceProvider);

            nLogConfig.ConfigNLogToUseAWSCloudWatch();

            EnsureSQSForroLevelCreation(serviceProvider);
            // In production, the Angular files will be served from this directory
            services.AddSpaStaticFiles(configuration =>
            {
                configuration.RootPath = "ClientApp/dist";
            });
        }