Shailendra
Shailendra

Reputation: 173

Can I create non static Azure function class in C#, what are the consequences?

This non static class is required for constructor injection in Azure function and collection of custom telemetry events.

If we create an azure function app in visual studio, it creates default with static keyword like this:

public static async Task<IActionResult> Run(
                [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
                ILogger log)
{
     telemetryClient.TrackEvent(new Exception("Function started"));
}

But to use constructor dependency injection (for Temeltry client, i am using it), we need to remove static keyword.

public Function1(TelemetryClient telemetryClient)
        {
            _telemetryClient = telemetryClient;
        }

Upvotes: 8

Views: 3310

Answers (2)

Ivan Glasenberg
Ivan Glasenberg

Reputation: 30025

Previously, Azure Functions only supported static classes/methods. This restriction made DI via constructor impossible. However later the support for non-static classes/methods was implemented (see Support Instance Functions).

So if you need to use DI via constructor, just change it to non-static. There are no consequences.

Upvotes: 13

gkn
gkn

Reputation: 21

This is not entirely true though - I just ran into some trouble with non static timer triggered functions. In my case I needed dependency injection in terms of entity framework, but this non static instance is now causing me trouble in order to call the admin endpoint to trigger the function when doing development locally.

See more on how to normally invoke static timer triggered functions here: What is the simplest way to run a timer-triggered Azure Function locally once?

Upvotes: 0

Related Questions