Итак, посмотрев на исходный код SDK для веб-задания, я нашел клудж. Ну, я думаю, что это клудж. Это работает, и теперь я могу использовать новый 3.0 SDK.
Я публикую это здесь, в основном потому, что боюсь, что нет другого способа сделать это, используя мои собственные файлы конфигурации.
Если это не так, пожалуйста, дайте мне знать, и я удалю этот ответ.
Итак, мой код теперь выглядит так:
_wjHost = new HostBuilder().ConfigureWebJobs(b =>
{
b.AddAzureStorage(x =>
{
x.MaxPollingInterval = TimeSpan.FromSeconds(_pollSeconds);
});
}).ConfigureServices(s =>
{
s.AddSingleton(new StorageAccountProvider(new BlobStorageConfiguration(cfg.DocumentDatabase.BlobStorageServer)));
s.AddSingleton<INameResolver, Support.BlobNameResolver>(_ => new Support.BlobNameResolver(_env));
s.Configure<QueuesOptions>(o =>
{
o.MaxPollingInterval = TimeSpan.FromSeconds(_pollSeconds);
});
}).Build();
Строка, которую я добавил, была s.AddSingleton(new StorageAccountProvider(new BlobStorageConfiguration(cfg.DocumentDatabase.BlobStorageServer)));
SDK webjobs специально ищет ключ с именем Storage
. Поэтому я должен был реализовать IConfiguration
и сделать это следующим образом:
private sealed class BlobStorageConfiguration : IConfiguration
{
private readonly string _bsConnString;
public BlobStorageConfiguration(string connString)
{
_bsConnString = connString;
}
public string this[string key]
{
get => key == "Storage" ? _bsConnString : null;
set { }
}
public IEnumerable<IConfigurationSection> GetChildren() => null;
public IChangeToken GetReloadToken() => null;
public IConfigurationSection GetSection(string key) => null;
}
и теперь курок срабатывает просто отлично. Не красиво Но есть нулевая документация по новым методам IHost.