Ramkumar Singh
Ramkumar Singh

Reputation: 2450

Autofac Dependency Injection in Azure Function

I am trying to implement DI using Autofac IOC in Azure function. I need to build the container, but not sure where to put the code to build the container

Upvotes: 9

Views: 9843

Answers (6)

Marcos Junior
Marcos Junior

Reputation: 209

I've written a different answer to the main question, with a different solution, totally tied to the main question.

Previous solutions were either manually initializing a DI or using the decorator way of doing it. My idea was to tie the DI to the Functions Builder in the same way we do with aspnet, without decorators.

Upvotes: 1

Holger Leichsenring
Holger Leichsenring

Reputation: 811

I did write a blog entry for doing dependency injection with Autofac in Azure Functions. Have a look here: Azure Function Dependency Injection with AutoFac: Autofac on Functions

It follows a similar approach like the one by Boris Wilhelms. Another implementation based on Boris' approach can be found on github: autofac dependency injection

-- update ---

With Azure Function v2 it is possible to create nuget packages based on .net standard. Have a look onto Azure Functions Dependency Injection with Autofac: Autofac on Functions nuget Package

Upvotes: 12

Dasith Wijes
Dasith Wijes

Reputation: 1358

You can do it using a custom [inject] attribute. See example here https://blog.wille-zone.de/post/azure-functions-proper-dependency-injection/

Upvotes: 0

Boris Wilhelms
Boris Wilhelms

Reputation: 661

While Azure Functions does not support DI out of the box, it is possible to add this via the new Extension API. You can register the container using an IExtensionConfigProvider implementation. You can find a full example DI solution in Azure here https://blog.wille-zone.de/post/azure-functions-proper-dependency-injection/.

Upvotes: 4

Mikhail Shilkov
Mikhail Shilkov

Reputation: 35154

I think for now you would need to do something ugly like:

public static string MyAwesomeFunction(string message)
{
    if (MyService == null)
    {
        var instantiator = Initialize();
        MyService = instantiator.Resolve<IService>();
    }

    return MyService.Hello(message);
}

private static IService MyService = null;

private static IContainer Initialize()
{
    // Do your IoC magic here
}

Upvotes: 5

ahmelsayed
ahmelsayed

Reputation: 7402

Azure Functions doesn't support dependency injection yet. Follow this issue for the feature request https://github.com/Azure/Azure-Functions/issues/299

Upvotes: 3

Related Questions