diff --git a/src/Core/Services/Implementations/PlayIdService.cs b/src/Core/Services/Implementations/PlayIdService.cs index 4549631ebb..0c2a25291b 100644 --- a/src/Core/Services/Implementations/PlayIdService.cs +++ b/src/Core/Services/Implementations/PlayIdService.cs @@ -14,16 +14,31 @@ public class PlayIdService(IHostEnvironment hostEnvironment) : IPlayIdService } } +public class NeverPlayIdServices : IPlayIdService +{ + public string? PlayId + { + get => null; + set { } + } + + public bool InPlay(out string playId) + { + playId = string.Empty; + return false; + } +} + public class PlayIdSingletonService(IHttpContextAccessor httpContextAccessor, IHostEnvironment hostEnvironment) : IPlayIdService { - private PlayIdService Current + private IPlayIdService Current { get { var httpContext = httpContextAccessor.HttpContext; if (httpContext == null) { - throw new InvalidOperationException("HttpContext is not available"); + return new NeverPlayIdServices(); } return httpContext.RequestServices.GetRequiredService(); } diff --git a/test/Infrastructure.IntegrationTest/DatabaseDataAttribute.cs b/test/Infrastructure.IntegrationTest/DatabaseDataAttribute.cs index c458969748..7dadf654dd 100644 --- a/test/Infrastructure.IntegrationTest/DatabaseDataAttribute.cs +++ b/test/Infrastructure.IntegrationTest/DatabaseDataAttribute.cs @@ -1,5 +1,6 @@ using System.Reflection; using Bit.Core.Enums; +using Bit.Core.Services; using Bit.Core.Settings; using Bit.Infrastructure.Dapper; using Bit.Infrastructure.EntityFramework; @@ -124,6 +125,13 @@ public class DatabaseDataAttribute : DataAttribute { services.AddSingleton(); } + + // Include PlayIdService for tracking Play Ids in repositories + // We need the http context accessor to use the Singleton version, which pulls from the scoped version + services.AddHttpContextAccessor(); + + services.AddSingleton(); + services.AddScoped(); } private void AddDapperServices(IServiceCollection services, Database database)