gpt4 book ai didi

c# - 无法访问方法(带有 ASP.NET Core 的 Azure 表)

转载 作者:太空宇宙 更新时间:2023-11-03 20:53:52 27 4
gpt4 key购买 nike

我正在尝试从另一个类(我的 View 的 Controller )访问方法,在其中连接到 Azure 表并更新实体。

我的“ Controller ”进行如下调用:

// this requires an object reference
HttpResponseMessage httpResponseMessage = AzureTableConn.UpdateTenantSettings(post);

这是我的类,其中包含与 Azure 表的连接,我在其中从 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();
}
}

我希望能够从我的 Controller 类调用 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 表的连接,并从需要提供参数的另一个类访问这些方法,例如要创建/更新/删除/等的实体(数据)?

最佳答案

您可以通过向 DI 容器注册 AzureTableConn 来让 ASP.NET Core 为您处理此问题,如下所示(在 ConfigureServices 中):

services.AddSingleton<AzureTableConn>();

为了在 Controller 中使用它,只需将其作为参数添加到 Controller 的构造函数中并存储以供以后使用,如下所示:

public class SomeController : Controller
{
private readonly AzureTableConn _azureTableConn;

public SomeController(AzureTableConn azureTableConn)
{
_azureTableConn = azureTableConn;
}

public IActionResult SomeAction()
{
...
var httpResponseMessage = _azureTableConn.UpdateTenantSettings(post);
...
}
}

通过此示例,您可以在任何 Controller 操作中使用 _azureTableConn。因为我们使用了 AddSingleton,所以每个 Controller 都会获得相同的实例,该实例只会创建一次。

文档很好地更详细地解释了这一点:Dependency injection in ASP.NET Core .

关于c# - 无法访问方法(带有 ASP.NET Core 的 Azure 表),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52579758/

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