我在一个界面上有多个具体实现。我已经将其注册到ASP.NET core DI中,如下所示:
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();
}
});
然后我将Func<MessageType, IMessageService> serviceAccessor
注入构造函数
当我请求特定实现serviceAccessor(MessageType.Sms)
时引发异常
激活的事件持续时间线程异常抛出: 中的“ System.ObjectDisposedException” Microsoft.Extensions.DependencyInjection.dll(“无法访问 处理对象。”)引发异常:“ System.ObjectDisposedException” 在Microsoft.Extensions.DependencyInjection.dll中(“无法访问 处置的对象。”)超链接:激活历史记录 调试8.97秒[428] WorkPool-Session#2:Connection(3a5aaef7-e40f-4607-9d12-eacbd0dd5f6d,amqp:// localhost:5672)
问题是什么?
答案 0 :(得分:2)
由于实现类中的问题是调用了IServiceProvider,该IServiceProvider将在DI的工厂之后处理。如果我在.Net Core上遇到过同样的问题,也许这是最新的问题。
并用于接口的多种实现。我认为更好
Interface IMessage<T>
Class MailMessage : IMessage<MessageType>
Services.AddTransient<IMessage<MessageType>, MailMessage>()