3
votes

.Net Core - AWS Lambda Project activant DI

J'ai un projet Lambda dans .net core et je souhaite activer l'injection de dépendances. J'ai créé une classe de démarrage dans laquelle j'ai ajouté ConfigureService et ConfigureContainer

public class Startup
{
        public void ConfigureServices(IServiceCollection services)
        {
            void ConfigureContainer()
            {
                services.AddTransient<IProfileEventHandler, ProfileEventHandler>();
                services.AddTransient<IRepository, ESRepository>();
                services.AddTransient<IDataKeyDecryption, KmsDataKeyDecryption>();
                services.AddTransient<IDecryptionProvider, DecryptionProvider>();
            }

            ConfigureContainer();
        }

}

Habituellement, un projet de base .net typique a une classe de programme et nous invoquerons la classe de démarrage dans la méthode CreateWebHost, lorsque nous exécuterons le WebHost, il résoudra simplement la dépendance. Mais comment puis-je faire la même chose dans le projet AWS Lambda.


3 Réponses :


1
votes

L'injection de dépendances n'a rien à voir avec Lambda. Si tout est dans votre code sur la façon dont vous le gérez.

Jetez un œil à l'exemple d'implémentation ici.

https: // docs .aws.amazon.com / lambda / latest / dg / dotnet-programmation-model-handler-types.html

Initialise le code DI au point d'entrée de la méthode statique.

J'espère que cela aide.


0 commentaires

3
votes

Vous pouvez réellement utiliser Asp.NET Core dans Lambdas, ce qui facilite bien sûr le développement Web. Si vous téléchargez les modèles de projet dotnet, vous pouvez créer un projet à partir d'un modèle qui a déjà un modèle sans serveur ainsi que le point d'entrée lambda, tous configurés pour lambda!

En utilisant cela, vous obtiendrez les DI et IoC fournis par Asp.Net Core.

Si vous utilisez VS, vous pouvez télécharger AWS Toolkit for Visual Studio: https://aws.amazon.com/visualstudio/

Vous pouvez également télécharger les modèles à utiliser via le cli dotnet https: // aws .amazon.com / blogs / developer / creation-net-core-aws-lambda-projets-sans-visual-studio /


0 commentaires

2
votes

Vous pouvez consulter l'exemple .NET sans serveur et en tirer l'idée. Il a des implémentations assez simples:

  1. Créez la classe LambdaEntryPoint héritée de APIGatewayProxyFunction.

  2. Ajoutez un point de ressource dans serverless.template à cette ressource.

LambdaEntryPoint.cs:

"Resources": {
    "AspNetCoreFunction": {
      "Type": "AWS::Serverless::Function",
      "Properties": {
        "Handler": "AWSServerless::AWSServerless.LambdaEntryPoint::FunctionHandlerAsync",
        "Runtime": "dotnetcore3.1",
        "Events": {
          "ProxyResource": {
            "Type": "Api",
            "Properties": {
              "Path": "/{proxy+}",
              "Method": "ANY"
            }
          },
          "RootResource": {
            "Type": "Api",
            "Properties": {
              "Path": "/",
              "Method": "ANY"
            }
          }
        }
      }
    },

serverless.template:

public class LambdaEntryPoint : Amazon.Lambda.AspNetCoreServer.APIGatewayProxyFunction
{
    protected override void Init(IWebHostBuilder builder)
    {
        builder.UseStartup<Startup>();
    }
}

Bonne explication sur .NET Lambda sous le capot - https://aws.amazon.com/blogs/developer/one-month-update-to-net-core-3-1-lambda/


0 commentaires