3

У меня есть следующий тестовый код, который находится внутри проекта WebJob. Он запускается после создания (или изменения) какого-либо blob внутри учетной записи хранилища «cBinary/test1 /».Поставщик имени пути Blob для запуска WebJob

Код работает.

public class Triggers 
{ 
    public void OnBlobCreated(
     [BlobTrigger("cBinary/test1/{name}")] Stream blob, 
     [Blob("cData/test3/{name}.txt")] out string output) 
    { 
     output = DateTime.Now.ToString(); 
    } 
} 

вопрос: как избавиться от уродливых жестко закодированы сопзЬ строку "cBinary/test1 /" и "" CDATA/test3/"

Hard-кодирование одна проблема, но я? необходимо создать и поддерживать пару таких строк (blob-каталогов), которые создаются динамически - зависят от поддерживаемых типов. Более того, мне нужно это строковое значение в нескольких местах, я не хочу его дублировать.

I хотели бы, чтобы они были размещены в каком-то поставщике конфигурации, который строит строку пути blob в зависимости от некоторого перечисления, например.

Как это сделать?

ответ

5

Вы можете реализовать INameResolver для динамического определения имен QueueNames и BlobNames. Вы можете добавить логику для разрешения имени. Ниже приведен пример кода.

public class BlobNameResolver : INameResolver 
{ 
    public string Resolve(string name) 
    { 
     if (name == "blobNameKey") 
     { 
      //Do whatever you want to do to get the dynamic name 
      return "the name of the blob container"; 
     } 
    } 
} 

И тогда вам нужно подключить его в Program.cs

class Program 
{ 
    // Please set the following connection strings in app.config for this WebJob to run: 
    // AzureWebJobsDashboard and AzureWebJobsStorage 
    static void Main() 
    { 
     //Configure JobHost 
     var storageConnectionString = "your connection string"; 
     //Hook up the NameResolver 
     var config = new JobHostConfiguration(storageConnectionString) { NameResolver = new BlobNameResolver() }; 

     config.Queues.BatchSize = 32; 

     //Pass configuration to JobJost 
     var host = new JobHost(config); 
     // The following code ensures that the WebJob will be running continuously 
     host.RunAndBlock(); 
    } 
} 

Наконец в Functions.cs

public class Functions 
{ 
    public async Task ProcessBlob([BlobTrigger("%blobNameKey%")] Stream blob) 
    { 
     //Do work here 
    } 
} 

Там же больше информации here.

Надеется, что это помогает.