доступ к облачному хранилищу Azure с новой конфигурацией в ASP.NET Core 2.0 - PullRequest
0 голосов
/ 25 сентября 2018

Есть ли способ настроить мое облачное хранилище Azure в ConfigureServices класса Startup, так же, как я настраиваю свой DatabaseContext?

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

Я знаю, что могу получить доступ к строке подключения изв контроллере, добавив экземпляр IConfiguration в коллекцию сервисов в виде одноэлементного объекта в ConfigureServices и затем внедрив IConfiguration в контроллер.

Но как мне получить доступ к этому в следующем классе, или это плохая практика, и естьэто лучший способ (например, в службах. Добавить ...)?

public class ClassifiedsToProcess
{
    public static void AddMessage(string message)
    {
         var storageConnectionString = Configuration.Get("AppSettings:ConnectionString");
         storageAccount = CloudStorageAccount.Parse(storageConnectionString);
         ...
    }
}

Спасибо!

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

Вот как я решил свою проблему, используя 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();
}

MyAzureQueue class

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);
    }
}

Класс параметров Azure

public class AzureOptions
{
    public AzureOptions()
    {
    }

    public string StorageConnectionString { get; set; }
}

В методе Startup.cs ConfigureServices я добавил следующие две строки

services.AddOptions();
services.Configure<AzureOptions>(Configuration.GetSection("Azure"));

А вот так выглядит мой appsettings.json

{
"Azure": {
 "StorageConnectionString": "DefaultEndpointsProtocol=https;AccountName=mystorageaccount;AccountKey=XXXXXXXXXXXXXXXXXXXXX;EndpointSuffix=core.windows.net"
 }
}
0 голосов
/ 25 сентября 2018

Вам следует попытаться избегать прямого использования IConfiguration и использовать вместо этого шаблон опции в ASP.NET Core .

В вашем примере я бы, например, реализовал IMessageRepository , который использует учетную запись хранения для сохранения сообщений.

Ваш класс AttraToProcess будет иметь зависимость от конструктора, и ваш метод AddMessage будет использовать его (он не должен быть статическим, поскольку вы хотите получить доступ к хранилищу).

...