代码之家  ›  专栏  ›  技术社区  ›  Judy007

如何在lambda之外集中DI代码函数.cs为了更好地分离关注点而进入专用类

  •  0
  • Judy007  · 技术社区  · 4 年前

    我如何在单独的课上做DI?

    下面是如何在函数类中完成。但是,为了更好地分离关注点,我希望将其放入专用类中。

    namespace SQSMessageProcessor
    {
        public class Function
        {
            private ILambdaConfiguration Configuration { get; }
            private IOrdersService OrderService { get; }
            public Function()
            {
                var serviceCollection = new ServiceCollection();
                ConfigureServices(serviceCollection);
                var serviceProvider = serviceCollection.BuildServiceProvider();
                Configuration = serviceProvider.GetService<ILambdaConfiguration>();
                OrderService = serviceProvider.GetService<IOrdersService>();
            }
            private void ConfigureServices(IServiceCollection serviceCollection)
            {
                serviceCollection.AddTransient<ILambdaConfiguration, LambdaConfiguration>();
                serviceCollection.AddTransient<IOrdersService, OrdersService>();
            }
    
            public async Task<string> FunctionHandler(SQSEvent sqsEvent, ILambdaContext context)
            {
                //Console.WriteLine(Configuration.Configuration["hello"]);
                Console.WriteLine($"Message ID: {sqsEvent.Records[0].MessageId}");
                Console.WriteLine($"Event Source: {sqsEvent.Records[0].EventSource}");
                Console.WriteLine($"Record Body Parsed:");
    
                var details = JObject.Parse(sqsEvent.Records[0].Body);
                Console.WriteLine(details);
                var order = details.ToObject<Order>();
                await OrderService.ProcessOrder(order);
                return $"Processed {sqsEvent.Records.Count} records.";
            }
        }
    }
    
    0 回复  |  直到 4 年前
        1
  •  0
  •   lobstar    4 年前

    public static class Extensions
    {
        public static void AddRabbitMq(this IServiceCollection services)
        {
            services.AddSingleton(typeof(RabbitMqOptions), service =>
            {
                //...
            });
        }
    }
    

    然后在ConfigureServices方法中使用它:

    public void ConfigureServices(IServiceCollection services)
    {
          services.AddRabbitMq();
    }