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); }); }
/// <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>(); }
// 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"; }); }