記錄一下以免忘記。
今天從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默認的。所以就報錯了