C# 创建AWS初始化类

C# 创建AWS初始化类,c#,asp.net-core,.net-core-2.0,C#,Asp.net Core,.net Core 2.0,我有一个API连接到我的dynamo db。我的API有相当多的GET、POST、Delete等端点。我使用以下代码: var awsCredentials = Helper.AwsCredentials(id, password); var awsdbClient = Helper.DbClient(awsCredentials, "us-east-2"); var awsContext = Helper.DynamoDbContext(awsdbClient); List<ScanC

我有一个API连接到我的dynamo db。我的API有相当多的GET、POST、Delete等端点。我使用以下代码:

var awsCredentials = Helper.AwsCredentials(id, password);
var awsdbClient = Helper.DbClient(awsCredentials, "us-east-2");
var awsContext = Helper.DynamoDbContext(awsdbClient);

List<ScanCondition> conditions = new List<ScanCondition>();
var response = await context.ScanAsync<MyData>(conditions).GetRemainingAsync();

return response.ToList();
我在API中使用这个助手类来初始化AWS


有没有更好的方法来初始化它?

让我们利用ASP.Net内置的依赖项注入

我们需要制作一个快速界面来公开您需要的值

public interface IDynamoDbClientAccessor
{
    DynamoDBContext GetContext();
}
还有一个设置类,我们稍后会用到它

public class DynamoDbClientAccessorSettings
{
    public string Id { get; set; }
    public string Password { get; set; }
    public string Region { get; set; }
}
现在是混凝土课

public class DynamoDbClientAccessor : IDynamoDbClientAccessor
{
    private readonly DynamoDbClientAccessorSettings settings;

    public DynamoDbClientAccessor(IOptions<DynamoDbClientAccessorSettings> options)
    {
        settings = options?.Value ?? throw new ArgumentNullException(nameof(options));
    }

    public DynamoDBContext GetContext()
    {
        // You have the option to alter this if you don't
        // want to create a new context each time. 
        // Have a private variable at the top of this class
        // of type DynamoDBContext. If that variable is not null,
        // return the value. If it is null, create a new value,
        // set the variable, and return it.

        var awsCredentials = Helper.AwsCredentials(settings.Id, settings.Password);
        var awsdbClient = Helper.DbClient(awsCredentials, settings.Region);
        var awsContext = Helper.DynamoDbContext(awsdbClient);

        return awsContext;
    }
}
公共类DynamoDbClientAccessor:IDynamoDbClientAccessor
{
专用只读DynamoDbClientAccessorSettings设置;
公共DynamoDbClientAccessor(IOptions选项)
{
设置=选项?值??抛出新的ArgumentNullException(选项名称));
}
公共DynamoDBContext GetContext()
{
//如果不这样做,您可以选择更改此选项
//每次都要创建一个新的上下文。
//在这个类的顶部有一个私有变量
//类型为DynamoDBContext。如果该变量不为null,
//返回值。如果为空,则创建一个新值,
//设置变量并返回它。
var awsCredentials=Helper.awsCredentials(settings.Id、settings.Password);
var awsdbClient=Helper.DbClient(awsCredentials,settings.Region);
var awsContext=Helper.DynamoDbContext(awsdbClient);
返回awsContext;
}
}
在你的创业课上把所有这些联系起来

services.AddSingleton<IDynamoDbClientAccessor, DynamoDbClientAccessor>();
services.Configure<DynamoDbClientAccessorSettings>(c =>
{
    c.Id = "YOUR ID";
    c.Password = "YOUR PASSWORD";
    c.Region = "YOUR REGION";
});
services.AddSingleton();
services.Configure(c=>
{
c、 Id=“您的Id”;
c、 Password=“您的密码”;
c、 Region=“您所在的地区”;
});
现在,在控制器或其他DI服务中,您需要构造函数中的
IDynamoDbClientAccessor
实例


一旦你更加熟悉依赖注入,你就能够将更多的东西分解成它们自己的依赖服务。如前所述,AWS SDK甚至提供了一些接口供您使用,这些接口也有帮助。

这是Asp.Net,还是您可以使用依赖项注入?如果不是,您能否将
awsdbClient
awsContext
设置为静态,以便在应用程序启动时只需创建一次?这是asp.net Core我如何在此处使用依赖项注入,并在我的启动类中添加AWS为所有内容提供了一系列接口Hanks@gunr2171以获得详细解释,这真的帮助了我。事实上,我发现AWS文档不够详细。也许我需要深入研究一下。
services.AddSingleton<IDynamoDbClientAccessor, DynamoDbClientAccessor>();
services.Configure<DynamoDbClientAccessorSettings>(c =>
{
    c.Id = "YOUR ID";
    c.Password = "YOUR PASSWORD";
    c.Region = "YOUR REGION";
});