7

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?

1
  • register all the objects with the service collection at the composite root and dependencies should be injected when resolving the desired type
    – Nkosi
    Commented Jun 11, 2021 at 16:56

1 Answer 1

12

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

0

Not the answer you're looking for? Browse other questions tagged or ask your own question.