Требование: создать функцию Azure, которая может внедрить Entity Framework
контекст в метод Run
с использованием внедрения зависимостей.
Вот мой Startup
класс
[assembly: WebJobsStartup(typeof(Startup))]
namespace MessagesToSqlDbFuncApp
{
internal class Startup : IWebJobsStartup
{
public void Configure(IWebJobsBuilder builder) =>
builder.AddDependencyInjection<ServiceProviderBuilder>();
}
}
Вот ServiceProviderBuilder
class
public class ServiceProviderBuilder : IServiceProviderBuilder
{
public IServiceProvider Build()
{
IConfigurationRoot config = new ConfigurationBuilder()
.SetBasePath(Environment.CurrentDirectory)
.AddJsonFile("local.settings.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables()
.Build();
var connectionString = config.GetConnectionString("SqlConnectionString");
var services = new ServiceCollection();
services.AddDbContext<DataContext>(options => options.UseSqlServer(connectionString));
return services.BuildServiceProvider(true);
}
}
Это моя функция
[FunctionName("MessagesToSqlDbFuncApp")]
public static async Task Run([BlobTrigger("messagecontainer/{name}", Connection = "AzureWebJobsStorage")]
Stream myBlob,
string name,
ILogger log,
[Inject] DataContext myContext)
{
}
Вот ошибка, которая выдается при запуске функции
[20.02.2017 4: 25: 10 AM] Ошибка индексации метода «MessagesToSqlDbFuncApp» [20.02.2009 4:25:10] Microsoft.Azure.WebJobs.Host: Ошибка индексации метода «BlobQCMessagesToSqlDbFuncApp».Microsoft.Azure.WebJobs.Host: Невозможно привязать параметр «myContext» к типу DataContext.Убедитесь, что параметр Type поддерживается привязкой.Если вы используете привязки расширений (например, хранилище Azure, ServiceBus, таймеры и т. Д.), Убедитесь, что вы вызвали метод регистрации расширений в своем коде запуска (например, builder.AddAzureStorage (), builder.AddServiceBus (), builder.AddTimers () и т. д.).
Вот пакеты и версии nuget
- Версия функции Azure: 2
- Visual Studio: 2017
- Microsoft.EntityFrameworkCore: 2.1.4
- Microsoft.EntityFrameworkCore.Design: 2.1.4
- Microsoft.EntityFrameworkCore.SqlServer: 2.1.4
- Microsoft.Extensions.DependencyInjection: 2.2.0
- Microsoft.NET.Sdk.Functions: 1.0.24
- Microsoft.NETCore.App: 2.1.0
Важное примечание: Отладчик не относится к классу Startup
!.Как инициализировать класс startup
?