使用ASP.NET Core 2.0中的新配置访问Azure云存储

使用ASP.NET Core 2.0中的新配置访问Azure云存储,azure,asp.net-core-mvc,azure-storage,asp.net-core-2.1,Azure,Asp.net Core Mvc,Azure Storage,Asp.net Core 2.1,是否有一种方法可以在Startup类的ConfigureServices中配置我的Azure云存储,与配置我的DatabaseContext的方法相同 var connection = Configuration.GetConnectionString("myDatabaseConnectionString"); services.AddDbContext<DatabaseContext> (options => options.UseSqlServer(co

是否有一种方法可以在
Startup
类的
ConfigureServices
中配置我的Azure云存储,与配置我的DatabaseContext的方法相同

var connection = Configuration.GetConnectionString("myDatabaseConnectionString");
services.AddDbContext<DatabaseContext>
         (options => options.UseSqlServer(connection));

谢谢

您应该尝试避免直接使用IConfiguration,而是使用

在你的例子中,我会。G实现一个IMessageRepository,它使用存储帐户来持久化消息


ClassifiedStopProcess类将具有对它的构造函数依赖关系,AddMessage方法将使用它(它不应该是静态的,因为您希望访问存储库)

您应该尝试避免直接使用IConfiguration,而是使用

在你的例子中,我会。G实现一个IMessageRepository,它使用存储帐户来持久化消息


ClassifiedStopProcess类将具有对它的构造函数依赖关系,AddMessage方法将使用它(它不应该是静态的,因为您希望访问存储库)

下面是我如何按照Martin Brandl的建议使用IOptions解决问题的

控制器代码

private string makeJson;
private MyAzureQueue MyAzureQueue;


public AdminController(IOptions<AzureOptions> optionsAccessor)
{
   MyAzureQueue = new MyAzureQueue(optionsAccessor);
}


public IActionResult Index()
{ 
   MyAzureQueue.AddMessage("my message");
   return View();
}
{
"Azure": {
 "StorageConnectionString": "DefaultEndpointsProtocol=https;AccountName=mystorageaccount;AccountKey=XXXXXXXXXXXXXXXXXXXXX;EndpointSuffix=core.windows.net"
 }
}
在Startup.cs ConfigureServices方法中,我添加了以下两行

public interface IMessageRepository
{
    void AddMessage(string message);
}

public class MyAzureQueue: IMessageRepository
{
    private readonly CloudQueue _queue;
    public ClassifiedsToProcess(IOptions<AzureOptions> optionsAccessor)
    {
        CloudStorageAccount storageAccount = AzureStorageHelper.getStorageAccount(optionsAccessor.Value.StorageConnectionString);
        _queue = AzureStorageHelper.GetQueue(storageAccount, "mystorageaccount");
    }

    public void AddMessage(string message)
    {
        CloudQueueMessage cloudQueueMessage = new CloudQueueMessage(message);
        _queue.AddMessageAsync(cloudQueueMessage);
    }
}
public class AzureOptions
{
    public AzureOptions()
    {
    }

    public string StorageConnectionString { get; set; }
}
services.AddOptions();
services.Configure<AzureOptions>(Configuration.GetSection("Azure"));

下面是我如何按照Martin Brandl的建议使用IOptions解决问题的

控制器代码

private string makeJson;
private MyAzureQueue MyAzureQueue;


public AdminController(IOptions<AzureOptions> optionsAccessor)
{
   MyAzureQueue = new MyAzureQueue(optionsAccessor);
}


public IActionResult Index()
{ 
   MyAzureQueue.AddMessage("my message");
   return View();
}
{
"Azure": {
 "StorageConnectionString": "DefaultEndpointsProtocol=https;AccountName=mystorageaccount;AccountKey=XXXXXXXXXXXXXXXXXXXXX;EndpointSuffix=core.windows.net"
 }
}
在Startup.cs ConfigureServices方法中,我添加了以下两行

public interface IMessageRepository
{
    void AddMessage(string message);
}

public class MyAzureQueue: IMessageRepository
{
    private readonly CloudQueue _queue;
    public ClassifiedsToProcess(IOptions<AzureOptions> optionsAccessor)
    {
        CloudStorageAccount storageAccount = AzureStorageHelper.getStorageAccount(optionsAccessor.Value.StorageConnectionString);
        _queue = AzureStorageHelper.GetQueue(storageAccount, "mystorageaccount");
    }

    public void AddMessage(string message)
    {
        CloudQueueMessage cloudQueueMessage = new CloudQueueMessage(message);
        _queue.AddMessageAsync(cloudQueueMessage);
    }
}
public class AzureOptions
{
    public AzureOptions()
    {
    }

    public string StorageConnectionString { get; set; }
}
services.AddOptions();
services.Configure<AzureOptions>(Configuration.GetSection("Azure"));

谢谢你的快速回答!事实上,IMessageRepository看起来很不错。不幸的是,关于选项模式的文档对我来说有点混乱,您能在我的示例中给我一个更具体的答案吗?我还尝试根据您的指导实现IMessageRepository,但仍然无法访问配置部分。有什么想法吗?你可以在这里找到我所做的,谢谢你的快速回答!事实上,IMessageRepository看起来很不错。不幸的是,关于选项模式的文档对我来说有点混乱,您能在我的示例中给我一个更具体的答案吗?我还尝试根据您的指导实现IMessageRepository,但仍然无法访问配置部分。有什么想法吗?你可以找到我在这里做的事