【发布时间】:2018-09-30 16:16:33
【问题描述】:
我正在尝试从另一个类(我的视图的控制器)访问一个方法,在该类中我与 Azure Tables 建立连接并更新实体。
我的“控制器”拨打电话如下:
// this requires an object reference
HttpResponseMessage httpResponseMessage = AzureTableConn.UpdateTenantSettings(post);
这是我的课程,其中包含我与 Azure Tables 的连接,我从 Azure Key Vault 中提取连接字符串:
public class AzureTableConn
{
public AzureTableConn(IConfiguration configuration)
{
Configuration = configuration;
}
private IConfiguration Configuration { get; set; }
private CloudTable TableConnection(string tableName)
{
var connectionString = Configuration["AzureTableStorageConnectionString"];
var cloudStorageAccount = CloudStorageAccount.Parse(connectionString);
CloudTableClient tableClient = cloudStorageAccount.CreateCloudTableClient();
CloudTable cloudTable = tableClient.GetTableReference(tableName);
return cloudTable;
}
public HttpResponseMessage UpdateTenantSettings(TenantSettingsModel tenantSettingsModel)
{
CloudTable cloudTable = TableConnection("TenantSettings");
Task<TableResult> mergeEntity = cloudTable.ExecuteAsync(TableOperation.Merge(tenantSettingsModel));
return new HttpResponseMessage();
}
}
我希望能够从我的控制器类中调用UpdateTenantSettings 方法,但它说我需要一个实例。这是有道理的,但是如果不向默认构造函数提供 IConfiguration 对象,我将无法创建实例。我觉得自己陷入了第 22 条陷阱,并且没有足够的知识来绕过它。
我的意图是在我的应用程序中使用我的 AzureTableConn 类,而不是在每次我想读/写 Azure 表时创建它的新实例。我尝试将我的AzureTableConn 类设置为静态,虽然这可以解决对象引用错误,但我对IConfiguration 的引用出现问题。我也尝试将我的构造函数设置为静态,但这再次打破它并告诉我“静态构造函数必须是无参数的”。
我还尝试将以下内容添加到我的 Startup.cs 文件中:
services.Configure<AzureTableConnectionString>(Configuration);
其中AzureTableConnectionString 定义为:
public class AzureTableConnectionString
{
public string ConnectionString { get; set; }
}
但是,我不知道这是否正确或如何实现。
那么我怎样才能将我的 Azure Key Vault 配置设置拉到一个类中,然后使用同一个类中的方法来重新使用与 Azure 表的连接,并从另一个我需要提供参数的类访问这些方法,例如要创建/更新/删除/等的实体(数据)?
【问题讨论】:
标签: c# azure azure-table-storage azure-keyvault