lgp1985.Azure.Functions.Worker.FunctionContextAccessorHelper
1.0.3
dotnet add package lgp1985.Azure.Functions.Worker.FunctionContextAccessorHelper --version 1.0.3
NuGet\Install-Package lgp1985.Azure.Functions.Worker.FunctionContextAccessorHelper -Version 1.0.3
<PackageReference Include="lgp1985.Azure.Functions.Worker.FunctionContextAccessorHelper" Version="1.0.3" />
paket add lgp1985.Azure.Functions.Worker.FunctionContextAccessorHelper --version 1.0.3
#r "nuget: lgp1985.Azure.Functions.Worker.FunctionContextAccessorHelper, 1.0.3"
// Install lgp1985.Azure.Functions.Worker.FunctionContextAccessorHelper as a Cake Addin #addin nuget:?package=lgp1985.Azure.Functions.Worker.FunctionContextAccessorHelper&version=1.0.3 // Install lgp1985.Azure.Functions.Worker.FunctionContextAccessorHelper as a Cake Tool #tool nuget:?package=lgp1985.Azure.Functions.Worker.FunctionContextAccessorHelper&version=1.0.3
lgp1985.FunctionContextAccessor Dependency Injection of FunctionContext
This allows usage of FunctionContext
in a dependency injection scenario. It is intended to be used in a serverless environment where each function is executed in isolated worker process.
Usage
On your Program.cs
file, add the following code:
// ...
using lgp1985.Azure.Functions.Extensions.DependencyInjection;
var host = new HostBuilder()
.ConfigureFunctionsWorkerDefaults(
// ⬇️ Add this ⬇️
s => s.UseFunctionContextAccessor()
// ⬆️ Add this ⬆️
).ConfigureServices(services =>
{
services.AddApplicationInsightsTelemetryWorkerService();
services.ConfigureFunctionsApplicationInsights();
services.AddHealthChecks();
// ...
// ⬇️ Add this ⬇️
services.AddFunctionContextAccessor()
// ⬆️ Add this ⬆️
})
.Build();
host.Run();
And then you can use in your functions services like this:
public class TokenDelegatingHandler : DelegatingHandler
{
private readonly IFunctionContextAccessor accessor;
public TokenDelegatingHandler(IFunctionContextAccessor accessor)
{
this.accessor = accessor;
}
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
if (accessor.FunctionContext is not null && request.RequestUri.Segments.LastOrDefault() != "health")
{
var accessToken = accessor.FunctionContext.BindingContext.BindingData.FindInRequest(HttpRequestQueries.GetAuthorizationToken);
request.Headers.Authorization = new AuthenticationHeaderValue(accessToken);
}
// ...
return base.SendAsync(request, cancellationToken);
}
}
Remarks
This interface should be used with caution. It relies on AsyncLocal<T>
which can have a negative performance impact on async calls. It also creates a dependency on "ambient state" which can make testing more difficult.
See Also
This have a similar use case as IHttpContextAccessor Interface, but for the isolated model you have to use FunctionContext
instead.
Thanks
It was based on benrobot/Functions.Worker.ContextAccessor.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 is compatible. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- Microsoft.Azure.Functions.Worker (>= 1.20.0)
-
net6.0
- Microsoft.Azure.Functions.Worker (>= 1.20.0)
-
net7.0
- Microsoft.Azure.Functions.Worker (>= 1.20.0)
-
net8.0
- Microsoft.Azure.Functions.Worker (>= 1.20.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.