using Jellyfin.Plugin.ShareLinks.Lifecycle; using Jellyfin.Plugin.ShareLinks.Security; using Jellyfin.Plugin.ShareLinks.Services; using Jellyfin.Plugin.ShareLinks.Storage; using Jellyfin.Plugin.ShareLinks.Web; using MediaBrowser.Controller; using MediaBrowser.Controller.Authentication; using MediaBrowser.Controller.Plugins; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.DependencyInjection; namespace Jellyfin.Plugin.ShareLinks; /// /// Registers the foundational ShareLinks services used by later API and web /// workers. /// public class PluginServiceRegistrator : IPluginServiceRegistrator { /// public void RegisterServices(IServiceCollection serviceCollection, IServerApplicationHost applicationHost) { _ = applicationHost; // Registered as a global MVC filter so it sees every plugin's controllers, // not just this one's. Options are materialised after all plugin registrators // have run, so adding to the collection here is in time. serviceCollection.AddSingleton(); serviceCollection.Configure(options => options.Filters.AddService()); serviceCollection.AddHostedService(); serviceCollection.AddSingleton(); serviceCollection.AddSingleton(); serviceCollection.AddSingleton(); serviceCollection.AddSingleton(); serviceCollection.AddSingleton(); serviceCollection.AddSingleton(); serviceCollection.AddSingleton(); serviceCollection.AddSingleton(); serviceCollection.AddSingleton(provider => provider.GetRequiredService()); serviceCollection.AddHostedService(); } }