Register Generic Interface in Startup in ASP.NET Core 2.1

52 Views Asked by At

I have below interface and it's implementations.

Interface:

public interface ITrigger<T>  where T : class
{
    void Send(T bodyContent);
}

Implementation:

public class AdminTrigger : ITrigger<Admin>
{
    public void Send(Admin bodyContent)
    {
        //
    }
}
    
public class TeacherTrigger : ITrigger<Teacher> 
{
    public void Send(Teacher bodyContent)
    {
        //
    }
}

Without generic implementation, I was able to register them like

builder.Services.AddSingleton<AdminTrigger>();
builder.Services.AddSingleton<TeacherTrigger>();

builder.Services.AddSingleton<Func<UserType, ITrigger)>>(provider => key => {
    switch (key)
    {
        case UserType.Admin:
            return provider.GetService<AdminTrigger>();
        case UserType.Teacher:
            return provider.GetService<TeacherTrigger>();
        default: return null;
    }
});

But now I am getting an error at

builder.Services.AddSingleton<Func<UserType, ITrigger)>>(provider => key => {

Using generic type ITrigger<T> requires 1 type argument

Please help to solve this issue.

0

There are 0 best solutions below