Я создал функцию триггера BLOB-объектов Azure. Если файл вставлен в контейнер BLOB-объектов Azure в это время, эта функция запускается, и на основе данных файла нам необходимо вставить в нашу таблицу базы данных.
Мой класс триггерной функции выглядит так, как показано ниже
public static class StockCountTrigger
{
[FunctionName("StockCountTrigger")]
public static void Run([BlobTrigger("importstockcount/{name}", Connection = "AzureWebJobsStorage")] CloudBlockBlob cloudBlockBlob, TraceWriter log)
{
try
{
log.Info($"FileName:{cloudBlockBlob.Name}");
var environment = Constants.Environment;
IStockCountService stockCountService;
if (environment.IsIn(Helper.Environment.Client1))
{
stockCountService = new StockCountServiceClient1(cloudBlockBlob, log);
}
else
{
throw new NotImplementedException();
}
stockCountService.Import();
}
catch (Exception ex)
{
log.Error($"Error.", ex);
throw ex;
}
}
}
та же функция используется для нескольких клиентов с другим форматом файла, и эти данные вставляются в StockCount
стол.
моя служба будет как ниже
public class StockCountServiceClient1: IStockCountService
{
private readonly CloudBlockBlob cloudBlockBlob;
private readonly TraceWriter log;
private readonly IStockCountRepository _stockCountRepository;
public StockCountServiceClient1(CloudBlockBlob cloudBlockBlob, TraceWriter log)
{
this.cloudBlockBlob = cloudBlockBlob;
this.log = log;
_stockCountRepository = new StockCountRepository();
}
public void Import()
{
var stockCounts = GetFromCSV();
if (!stockCounts.Any())
return;
log.Info($"Total Records:{stockCounts.Count}");
_stockCountRepository.Insert(stockCounts);
}
private List<StockCountModel> GetFromCSV()
{
using (var stream = cloudBlockBlob.OpenRead())
{
TextReader reader = new StreamReader(stream);
using (var csvReader = new CsvReader(reader))
{
var records = csvReader.GetRecords<dynamic>().ToList();
return records.Select(x => new StockCountModel
{
StoreNo = x.StoreNo,
ArticleNo = x.ArticleNo,
Quantity = x.Quantity,
StockDateTime = x.StockDateTime,
Reference = cloudBlockBlob.Name
}).ToList();
}
}
}
}
Здесь, в репозитории, я создал объект и вставил его в базу данных.
здесь мой вопрос в том, что класс функции является статическим и его метод Run
также является статическим. Правильно ли написан код для создания репозитория и объекта и на основе среды присваивает ему экземпляр. Какой подход лучше всего, нужно также создать статический метод в репозитории?
Периодичность поступления файла в контейнер — каждые 10 минут.