using System.Threading; using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; namespace LANCommander.SDK.Plugins; /// /// The entry point contract every LANCommander plugin implements. Plugins are discovered /// from the host's Plugins drop-in folder and loaded once at startup. /// public interface IPlugin { /// Stable, globally unique identifier (e.g. "com.acme.myplugin"). string Id { get; } /// Human readable display name. string Name { get; } /// Plugin version (SemVer recommended). string Version { get; } /// Plugin author. string Author { get; } /// /// Registers the plugin's own services into the host's DI container. Called during host /// startup before the service provider is built, so implementations must only register /// services and must not attempt to resolve them. /// void ConfigureServices(IServiceCollection services); /// /// Asynchronous startup hook, invoked after the host's service provider is built. Use this /// to resolve services, subscribe to lifecycle events, register UI extensions, etc. /// Task InitializeAsync(PluginContext context, CancellationToken cancellationToken); }