gpt4 book ai didi

c# - 在 .NET Core 中注入(inject) DynamoDBContext 实例的最佳方式

转载 作者:太空宇宙 更新时间:2023-11-03 18:54:31 25 4
gpt4 key购买 nike

目前正在为我的类(class)开发一个 Web 服务项目,并决定使用 .NET Core 和 DynamodDB 制作一个 Web API。

我只是好奇注入(inject) DynamoDBContext 的最佳方式是什么?

我目前是这样做的:

public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();

services.AddDefaultAWSOptions(Configuration.GetAWSOptions());
services.AddAWSService<IAmazonDynamoDB>();
}

我从 DynamoDB 文档中获得了上面的这段代码。我将 IAAmazonDynamoDB 的实例添加到项目中。

DynamoDBContext context;
public ValuesController(IAmazonDynamoDB context)
{
this.context = new DynamoDBContext(context);
}

然后,在 Controller 中,我注入(inject)了 IAmazonDynamoDB 实例,并使用它来创建 DynamoDBContext 的实例。

有没有办法在 ConfigureServices 方法中创建上下文的实例并将其添加到那里的项目中,或者我目前的做法是否正常?

最佳答案

Is there a way to create an instance of the context in the ConfigureServices method and add it to the project there, or is the way I am doing it currently fine?

虽然您的解决方案可行,但它有一个缺点。您没有对 DynamoDBContext 使用依赖注入(inject)并通过 new 运算符在 Controller 构造函数中创建它的实例。在对代码进行单元测试时,您会遇到问题,因为您无法替代 DynamoDBContext 的实现。

正确的做法是在DI容器中注册DynamoDBContext,让容器在需要的时候自己创建一个实例。通过这种方法,IDynamoDBContext 被注入(inject)到 ValuesController 中:

public class ValuesController
{
private readonly IDynamoDBContext context;

public ValuesController(IDynamoDBContext context)
{
this.context = context;
}

// ...
}

public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();

services.AddDefaultAWSOptions(Configuration.GetAWSOptions());
services.AddAWSService<IAmazonDynamoDB>();
services.AddTransient<IDynamoDBContext, DynamoDBContext>();
}

关于c# - 在 .NET Core 中注入(inject) DynamoDBContext 实例的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48676919/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com