Используйте заглушку при запуске Azure Функции локально - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть проект Azure Функции (. NET Core), и я хотел бы выбрать реализацию для некоторого класса в зависимости от среды. Примерно так:

public class Startup : FunctionsStartup
{
    public override void Configure(IFunctionsHostBuilder builder)
    {
        builder.Services.AddLogging();
        #if azure environment
        builder.Services.AddSingleton<IAzureApi, AzureApi>();
        #else
        builder.Services.AddSingleton<IAzureApi, AzureApiStub>();
        #endif
    }
}

Как лучше всего это сделать? Можно ли настроить такое поведение local.settings. json?

Ответы [ 2 ]

1 голос
/ 29 апреля 2020

Вы можете использовать директиву препроцессора DEBUG в своем файле Startup.cs:

public class Startup : FunctionsStartup
{
    public override void Configure(IFunctionsHostBuilder builder)
    {
#if DEBUG
        builder.Services.AddSingleton<IAzureApi, AzureApiStub>();
#else
        builder.Services.AddSingleton<IAzureApi, AzureApi>();
#endif
    }
}

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/preprocessor-directives/preprocessor-if

Вы должны запустить свое решение в Debug конфигурации, которую я предполагаю, что вы будете делать при локальном запуске?

1 голос
/ 28 апреля 2020

Простой способ добиться этого с помощью пользовательского свойства в файле конфигурации.

 [FunctionName("CustomSettings")]
public static Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Anonymous, "GET")]HttpRequestMessage req, TraceWriter log)
{
    var customSetting =  Environment.GetEnvironmentVariable("AzureEnvironment", EnvironmentVariableTarget.Process);
    if(customSetting == "Development")
    {
        //dosomething
    }
}

Добавьте это свойство на портал azure вручную (AppSettings).
для получения дополнительной информации -> https://docs.microsoft.com/en-us/sandbox/functions-recipes/environment-variables?tabs=csharp
https://docs.microsoft.com/en-us/azure/azure-functions/functions-dotnet-class-library#environment - переменные

...