Rasik
Rasik

Reputation: 2410

Inject an IEnumerable of interface in controller using Dependency Injection

I want to resolve the dependency for the IEnumerable collections of the multiple class inheriting the Interface on the controller.

I want to resolve the following dependency during the application startup:

var notificationStrategy = new NotificationStrategy(
new INotificationService[]
{
    new TextNotificationService(), // <-- inject any dependencies here
    new EmailNotificationService()      // <-- inject any dependencies here
});

NotificationStragey

public class NotificationStrategy : INotificatonStrategy
{
    private readonly IEnumerable<INotificationService> notificationServices;

    public NotificationStrategy(IEnumerable<INotificationService> notificationServices)
    {
        this.notificationServices = notificationServices ?? throw new ArgumentNullException(nameof(notificationServices));
    }
}

What is the best way of dependency injection of IEnumerable types of objects in the asp.net core without using any external dependency or library?

Upvotes: 8

Views: 8841

Answers (1)

Nkosi
Nkosi

Reputation: 247098

Register all the types with the service collection at the composite root

//...

services.AddScoped<INotificationService, TextNotificationService>();
services.AddScoped<INotificationService, EmailNotificationService>();

services.AddScoped<INotificatonStrategy, NotificationStrategy>();

//...

and all dependencies should be injected when resolving the desired type since the constructor already has IEnumerable<INotificationService> as a constructor parameter

Reference Dependency injection in ASP.NET Core

Upvotes: 13

Related Questions