【发布时间】:2019-03-04 01:50:36
【问题描述】:
我在一个接口上有多个具体实现。我已将其注册到 ASP.NET 核心 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.97s [428] WorkPool-Session#2:Connection(3a5aaef7-e40f-4607-9d12-eacbd0dd5f6d,amqp://localhost:5672)
出了什么问题?
【问题讨论】:
-
您使用的是哪个 DI 容器?
-
ASP.NET Core 默认 DI 容器
-
请发布MCVE 和完整的堆栈跟踪。
标签: c# asp.net asp.net-core dependency-injection