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.