I have multiple concrete implementations on a single interface. I have registered that in to ASP.NET core DI as below
services.AddTransient<EmailService>();
services.AddTransient<SmsService>();
services.AddTransient<Func<MessageType, IMessageService>>(serviceProvider => key =>
{
switch (key)
{
case MessageType.Email:
return serviceProvider.GetService<EmailService>();
case MessageType.Sms:
return serviceProvider.GetService<SmsService>();
default:
throw new KeyNotFoundException();
}
});
then i inject Func<MessageType, IMessageService> serviceAccessor to constructor
when i request specific implementation serviceAccessor(MessageType.Sms) throws an exception
Activated Event Time Duration Thread Exception thrown: 'System.ObjectDisposedException' in Microsoft.Extensions.DependencyInjection.dll ("Cannot access a disposed object.") Exception thrown: 'System.ObjectDisposedException' in Microsoft.Extensions.DependencyInjection.dll ("Cannot access a disposed object.") Hyperlink: Activate Historical Debugging 8.97s [428] WorkPool-Session#2:Connection(3a5aaef7-e40f-4607-9d12-eacbd0dd5f6d,amqp://localhost:5672)
what was the issue ?