Cody Robibero 2 weeks ago committed by GitHub
commit e63befa8f3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -59,6 +59,7 @@
<PackageVersion Include="prometheus-net.AspNetCore" Version="8.2.1" />
<PackageVersion Include="prometheus-net.DotNetRuntime" Version="4.4.0" />
<PackageVersion Include="prometheus-net" Version="8.2.1" />
<PackageVersion Include="Scrutor" Version="4.2.2" />
<PackageVersion Include="Serilog.AspNetCore" Version="8.0.1" />
<PackageVersion Include="Serilog.Enrichers.Thread" Version="3.1.0" />
<PackageVersion Include="Serilog.Settings.Configuration" Version="8.0.0" />

@ -7,6 +7,7 @@ using Jellyfin.Api.WebSocketListeners;
using Jellyfin.Drawing;
using Jellyfin.Drawing.Skia;
using Jellyfin.LiveTv;
using Jellyfin.Server.Helpers;
using Jellyfin.Server.Implementations;
using Jellyfin.Server.Implementations.Activity;
using Jellyfin.Server.Implementations.Devices;
@ -26,10 +27,10 @@ using MediaBrowser.Controller.Net;
using MediaBrowser.Controller.Security;
using MediaBrowser.Controller.Trickplay;
using MediaBrowser.Model.Activity;
using MediaBrowser.Providers.Lyric;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Scrutor;
namespace Jellyfin.Server
{
@ -74,15 +75,29 @@ namespace Jellyfin.Server
Logger.LogWarning("Skia not available. Will fallback to {ImageEncoder}.", nameof(NullImageEncoder));
}
serviceCollection.Scan(scan =>
{
var selector = scan.FromAssemblies(AppDomain.CurrentDomain.GetAssemblies());
AsSingleton<IAuthenticationProvider>(selector);
AsSingleton<IPasswordResetProvider>(selector);
AsSingleton<ILyricProvider>(selector);
AsSingleton<ILyricParser>(selector);
return;
static void AsSingleton<T>(IImplementationTypeSelector selector)
=> selector.AddClasses(c => c.AssignableTo<T>())
.UsingRegistrationStrategy(DistinctRegistrationStrategy.Instance)
.AsImplementedInterfaces()
.WithSingletonLifetime();
});
serviceCollection.AddEventServices();
serviceCollection.AddSingleton<IBaseItemManager, BaseItemManager>();
serviceCollection.AddSingleton<IEventManager, EventManager>();
serviceCollection.AddSingleton<IActivityManager, ActivityManager>();
serviceCollection.AddSingleton<IUserManager, UserManager>();
serviceCollection.AddSingleton<IAuthenticationProvider, DefaultAuthenticationProvider>();
serviceCollection.AddSingleton<IAuthenticationProvider, InvalidAuthProvider>();
serviceCollection.AddSingleton<IPasswordResetProvider, DefaultPasswordResetProvider>();
serviceCollection.AddScoped<IDisplayPreferencesManager, DisplayPreferencesManager>();
serviceCollection.AddSingleton<IDeviceManager, DeviceManager>();
serviceCollection.AddSingleton<ITrickplayManager, TrickplayManager>();
@ -97,16 +112,6 @@ namespace Jellyfin.Server
serviceCollection.AddScoped<IAuthenticationManager, AuthenticationManager>();
foreach (var type in GetExportTypes<ILyricProvider>())
{
serviceCollection.AddSingleton(typeof(ILyricProvider), type);
}
foreach (var type in GetExportTypes<ILyricParser>())
{
serviceCollection.AddSingleton(typeof(ILyricParser), type);
}
base.RegisterServices(serviceCollection);
}

@ -0,0 +1,27 @@
using System.Linq;
using Microsoft.Extensions.DependencyInjection;
using Scrutor;
namespace Jellyfin.Server.Helpers;
/// <summary>
/// Skip registering the descriptor if it exists.
/// </summary>
public class DistinctRegistrationStrategy : RegistrationStrategy
{
/// <summary>
/// The distinct registration strategy instance.
/// </summary>
public static readonly DistinctRegistrationStrategy Instance = new();
/// <inheritdoc />
public override void Apply(IServiceCollection services, ServiceDescriptor descriptor)
{
if (services.Any(service => service.ServiceType == descriptor.ServiceType && service.ImplementationType == descriptor.ImplementationType))
{
return;
}
services.Add(descriptor);
}
}

@ -50,6 +50,7 @@
<PackageReference Include="Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore" />
<PackageReference Include="prometheus-net" />
<PackageReference Include="prometheus-net.AspNetCore" />
<PackageReference Include="Scrutor" />
<PackageReference Include="Serilog.AspNetCore" />
<PackageReference Include="Serilog.Enrichers.Thread" />
<PackageReference Include="Serilog.Settings.Configuration" />

Loading…
Cancel
Save