J'avais un projet api et un projet de test en .net core 2.2. Maintenant, j'ai migré les deux projets en .net core 3.1.
Dans le projet de test, j'ai la méthode "Initialize" où j'ajoute les services manuellement.
public void Initalize(){
var services = new ServiceCollection();
services.AddDbContext<DatabaseContext>(opt =>
opt.UseInMemoryDatabase("EdgePrototype").UseQueryTrackingBehavior(QueryTrackingBehavior.NoTracking));
services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());
services.AddHostedService<QueuedHostedService>();
services.AddSingleton<IBackgroundTaskQueue, BackgroundTaskQueue>();
services.AddSingleton<TempFileCleanupProvider>();
services.AddSingleton<IHostedService, TempFileCleanupService>();
services.AddSingleton<DbCleanupProvider>();
services.AddSingleton<IHostedService, DbCleanupService>();
services.AddSingleton<IBackgroundTaskQueue, BackgroundTaskQueue>();
ServiceProvider = services.BuildServiceProvider();
ServiceScope = new Mock<IServiceScope>();
ServiceScope.Setup(x => x.ServiceProvider).Returns(ServiceProvider);
ServiceScopeFactory = new Mock<IServiceScopeFactory>();
ServiceScopeFactory
.Setup(x => x.CreateScope())
.Returns(ServiceScope.Object);
// Hosted Service
var service = ServiceProvider.GetService<IHostedService>() as QueuedHostedService;
service.StartAsync(CancellationToken.None);}
Dans .net core 2.2 le code ci-dessus fonctionnait parfaitement, mais après la migration la méthode "GetService" retourne toujours "null".
J'ai essayé d'accepter la réponse à la question ci-dessous. Cela fonctionne dans .net core 2.2 mais pas dans .net core 3.1. Test d'intégration pour le service hébergé .Net-Core``
Quelqu'un peut-il me suggérer les changements que je dois faire dans le code ci-dessus pour .net core 3.1 ?