using System; using Amazon.Lambda.Core; using Amazon.XRay.Recorder.Handlers.AwsSdk; using Amazon.DynamoDBv2; using ConnectedCar.Core.Shared.Services; using ConnectedCar.Core.Shared.Orchestrators; using ConnectedCar.Core.Services; using ConnectedCar.Core.Services.Context; using ConnectedCar.Core.Services.Translator; using Microsoft.Extensions.DependencyInjection; // Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class. [assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))] namespace ConnectedCar.Lambda { public abstract class BaseFunctions { private readonly ServiceProvider serviceProvider; protected BaseFunctions() { AWSSDKHandler.RegisterXRay(); var services = new ServiceCollection(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); serviceProvider = services.BuildServiceProvider(); } protected BaseFunctions(ServiceProvider serviceProvider) { if (serviceProvider == null) throw new InvalidOperationException(); this.serviceProvider = serviceProvider; } protected IAppointmentService GetAppointmentService() { return serviceProvider.GetRequiredService(); } protected ICustomerService GetCustomerService() { return serviceProvider.GetRequiredService(); } protected IDealerService GetDealerService() { return serviceProvider.GetRequiredService(); } protected IEventService GetEventService() { return serviceProvider.GetRequiredService(); } protected IRegistrationService GetRegistrationService() { return serviceProvider.GetRequiredService(); } protected ITimeslotService GetTimeslotService() { return serviceProvider.GetRequiredService(); } protected IVehicleService GetVehicleService() { return serviceProvider.GetRequiredService(); } protected IUserService GetUserService() { return serviceProvider.GetRequiredService(); } protected IAdminOrchestrator GetAdminOrchestrator() { return serviceProvider.GetRequiredService(); } protected ICustomerOrchestrator GetCustomerOrchestrator() { return serviceProvider.GetRequiredService(); } } }