Search code examples
c#-4.0collectionsautofaccode-injection

Is it possible to inject a list of resolved objects into a constructor using Autofac?


I'm new to Autofac (3) and am using it to find a number of classes in several assemblies that implement IRecognizer.

So I have:

builder.RegisterAssemblyTypes(AppDomain.CurrentDomain.GetAssemblies()).As<IRecognizer>();

which is fine.

But I'd like to inject references to the found components into a constructor - sort of:

public Detector(List<IRecognizer> recognizers)
{
    this.Recognizers = recognizers;
}

Is there any way to do this?


Solution

  • Autofac supports the IEnumerable<T> as a relationship type:

    For example, when Autofac is injecting a constructor parameter of type IEnumerable<ITask> it will not look for a component that supplies IEnumerable<ITask>. Instead, the container will find all implementations of ITask and inject all of them.

    So change your constructor to:

    public Detector(IEnumerable<IRecognizer> recognizers)
    {
        this.Recognizers = new List<IRecognizer>(recognizers);
    }