C# 创建AWS初始化类
我有一个API连接到我的dynamo db。我的API有相当多的GET、POST、Delete等端点。我使用以下代码: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
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";
});