簡體   English   中英

在單個接口上實現DI多重實現

[英]DI multiple implementation on single interface

我在一個界面上有多個具體實現。 我已將其注冊到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)引發異常

引發的激活事件持續時間線程異常:Microsoft.Extensions.DependencyInjection.dll中拋出“ System.ObjectDisposedException”(“無法訪問已處置的對象。”)異常拋出:Microsoft.Extensions.DependencyInjection.dll中出現“ System.ObjectDisposedException”(“訪問已處置的對象。”)超鏈接:激活歷史調試8.97s [428] WorkPool-Session#2:Connection(3a5aaef7-e40f-4607-9d12-eacbd0dd5f6d,amqp:// localhost:5672)

這是什么問題?

由於您的實現類中的問題是調用了IServiceProvider,該IServiceProvider將在DI的工廠后處置。 如果.Net Core在這里遇到相同問題,也許這是最新的問題。

並用於接口的多種實現。 我認為會更好

Interface IMessage<T> 
Class MailMessage : IMessage<MessageType>
Services.AddTransient<IMessage<MessageType>, MailMessage>()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM