.net7(.net core) 依賴注入:從 AddSingleton 註冊的類裏面訪問 AddScoped 的問題

記錄一下以免忘記。

今天從NopCommerce開源項目裏面把它的任務調度類拆出來到我的項目用的時候,發現報錯,報錯信息如下

Some services are not able to be constructed (Error while validating the service descriptor 'ServiceType: OUC.Services.ScheduleTasks.ITaskScheduler Lifetime: Singleton ImplementationType: OUC.Services.ScheduleTasks.TaskScheduler': Cannot consume scoped service 'OUC.Services.ScheduleTasks.IScheduleTaskService' from singleton 'OUC.Services.ScheduleTasks.ITaskScheduler'.)
---> System.InvalidOperationException: Error while validating the service descriptor 'ServiceType: OUC.Services.ScheduleTasks.ITaskScheduler Lifetime: Singleton ImplementationType: OUC.Services.ScheduleTasks.TaskScheduler': Cannot consume scoped service 'OUC.Services.ScheduleTasks.IScheduleTaskService' from singleton 'OUC.Services.ScheduleTasks.ITaskScheduler'.
---> System.InvalidOperationException: Cannot consume scoped service 'OUC.Services.ScheduleTasks.IScheduleTaskService' from singleton 'OUC.Services.ScheduleTasks.ITaskScheduler'.

依賴註冊的信息如下:

 

 

它在 TaskScheduler(單例註冊)的構造函數中使用了 IScheduleTaskService ,而 IScheduleTaskService是用scoped註冊的,我把這些代碼拆到我的項目後,編譯後運行竟然直接報錯了,而它的卻沒有。

後來發現它默認用的是autofac,而我用的是.net core的依賴注入,然後github上有人對autofac這個bug進行了報告 https://github.com/autofac/Autofac.Extensions.DependencyInjection/issues/106

簡單來說就是:autofac認爲從單例的類訪問scoped的類沒問題,而.net core自帶的依賴注入卻不行

回到NopCommerce,它默認用的是autofac,而我項目沒用,用的是.net core默認的。所以就報錯了

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章