Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,6 @@ public static IServiceCollection AddPluginManager( this IServiceCollection self

public static void UsePluginManager( this IServiceProvider self )
{
_ = self.GetRequiredService<PluginManager>();
self.GetRequiredService<PluginManager>().Initialize();
}
}
6 changes: 6 additions & 0 deletions managed/src/SwiftlyS2.Core/Modules/Plugins/PluginManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,13 @@ static async Task WaitForFileAccess( CancellationToken token, string filePath, i
? Assembly.GetExecutingAssembly()
: AppDomain.CurrentDomain.GetAssemblies().FirstOrDefault(a => loadingAssemblyName == a.GetName().Name);
};
}

/// <summary>
/// Must be called after DI container is fully built to avoid circular dependency.
/// </summary>
internal void Initialize()
{
LoadExports();
LoadPlugins();
}
Expand Down
10 changes: 5 additions & 5 deletions managed/src/SwiftlyS2.Core/Modules/Plugins/SwiftlyCore.cs
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ internal class SwiftlyCore : ISwiftlyCore, IDisposable
public string ContextBasePath { get; init; }
public string PluginDataDirectory { get; init; }
public GameFileSystem GameFileSystem { get; init; }
// public PluginManager PluginManager { get; set; }
public PluginManager PluginManager { get; set; }
public SwiftlyCore( string contextId, string contextBaseDirectory, PluginMetadata? pluginManifest, Type contextType, IServiceProvider coreProvider, string pluginDataDirectory )
{

Expand All @@ -94,7 +94,7 @@ public SwiftlyCore( string contextId, string contextBaseDirectory, PluginMetadat
.AddSingleton(this)
.AddSingleton<ISwiftlyCore>(this)
.AddSingleton(coreProvider.GetRequiredService<ProfileService>())
// .AddSingleton(coreProvider.GetRequiredService<PluginManager>())
.AddSingleton(coreProvider.GetRequiredService<PluginManager>())
.AddSingleton(coreProvider.GetRequiredService<ConfigurationService>())
.AddSingleton(coreProvider.GetRequiredService<HookManager>())
.AddSingleton(coreProvider.GetRequiredService<PlayerManagerService>())
Expand Down Expand Up @@ -141,7 +141,7 @@ public SwiftlyCore( string contextId, string contextBaseDirectory, PluginMetadat
.AddSingleton<IContextedProfilerService>(provider => provider.GetRequiredService<ContextedProfilerService>())
.AddSingleton<ISchedulerService>(provider => provider.GetRequiredService<SchedulerService>())
.AddSingleton<IEngineService>(provider => provider.GetRequiredService<EngineService>())
// .AddSingleton<IPluginManager>(provider => provider.GetRequiredService<PluginManager>())
.AddSingleton<IPluginManager>(provider => provider.GetRequiredService<PluginManager>())
.AddSingleton<ITraceManager>(provider => provider.GetRequiredService<TraceManager>())
.AddSingleton<IDatabaseService>(provider => provider.GetRequiredService<DatabaseService>())
.AddSingleton<ITranslationService>(provider => provider.GetRequiredService<TranslationService>())
Expand Down Expand Up @@ -185,7 +185,7 @@ public SwiftlyCore( string contextId, string contextBaseDirectory, PluginMetadat
GameService = serviceProvider.GetRequiredService<GameService>();
Logger = LoggerFactory.CreateLogger(contextType);
GameFileSystem = serviceProvider.GetRequiredService<GameFileSystem>();
// PluginManager = serviceProvider.GetRequiredService<PluginManager>();
PluginManager = serviceProvider.GetRequiredService<PluginManager>();
}

public void InitializeType( Type type )
Expand Down Expand Up @@ -232,7 +232,7 @@ public void Dispose()
IHelpers ISwiftlyCore.Helpers => Helpers;
IGameService ISwiftlyCore.Game => GameService;
IGameFileSystem ISwiftlyCore.GameFileSystem => GameFileSystem;
// IPluginManager ISwiftlyCore.PluginManager => PluginManager;
IPluginManager ISwiftlyCore.PluginManager => PluginManager;
string ISwiftlyCore.PluginPath => ContextBasePath;
string ISwiftlyCore.PluginDataDirectory => PluginDataDirectory;
string ISwiftlyCore.CSGODirectory => NativeEngineHelpers.GetCSGODirectoryPath();
Expand Down
3 changes: 2 additions & 1 deletion managed/src/SwiftlyS2.Shared/ISwiftlyCore.cs
Original file line number Diff line number Diff line change
Expand Up @@ -167,10 +167,11 @@ public interface ISwiftlyCore
/// Game file system interface.
/// </summary>
public IGameFileSystem GameFileSystem { get; }

/// <summary>
/// Plugin manager.
/// </summary>
// public IPluginManager PluginManager { get; }
public IPluginManager PluginManager { get; }

/// <summary>
/// Gets the file path to the plugin directory.
Expand Down
53 changes: 27 additions & 26 deletions managed/src/SwiftlyS2.Shared/SwiftlyCoreInjection.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,41 +9,42 @@ public static class SwiftlyCoreInjection
public static IServiceCollection AddSwiftly( this IServiceCollection self, ISwiftlyCore core, bool addLogger = true, bool addConfiguration = true )
{
_ = self
.AddSingleton(core)
.AddSingleton(core.ConVar)
.AddSingleton(core.Command)
.AddSingleton(core.Database)
.AddSingleton(core.Engine)
.AddSingleton(core.EntitySystem)
.AddSingleton(core.Event)
.AddSingleton(core.GameData)
.AddSingleton(core.GameEvent)
.AddSingleton(core.Localizer)
.AddSingleton(core.Memory)
.AddSingleton(core.NetMessage)
.AddSingleton(core.Permission)
.AddSingleton(core.PlayerManager)
.AddSingleton(core.Profiler)
.AddSingleton(core.Scheduler)
.AddSingleton(core.Trace)
.AddSingleton(core.MenusAPI)
.AddSingleton(core.CommandLine)
.AddSingleton(core.GameFileSystem)
.AddSingleton(core.Translation);
.AddSingleton(core)
.AddSingleton(core.ConVar)
.AddSingleton(core.Command)
.AddSingleton(core.Database)
.AddSingleton(core.Engine)
.AddSingleton(core.EntitySystem)
.AddSingleton(core.Event)
.AddSingleton(core.GameData)
.AddSingleton(core.GameEvent)
.AddSingleton(core.Localizer)
.AddSingleton(core.Memory)
.AddSingleton(core.NetMessage)
.AddSingleton(core.Permission)
.AddSingleton(core.PlayerManager)
.AddSingleton(core.Profiler)
.AddSingleton(core.Scheduler)
.AddSingleton(core.Trace)
.AddSingleton(core.MenusAPI)
.AddSingleton(core.CommandLine)
.AddSingleton(core.GameFileSystem)
.AddSingleton(core.Translation)
.AddSingleton(core.PluginManager);

if (addLogger)
{
_ = self
.AddSingleton(core.LoggerFactory)
.AddSingleton(typeof(ILogger<>), typeof(Logger<>));
.AddSingleton(core.LoggerFactory)
.AddSingleton(typeof(ILogger<>), typeof(Logger<>));
}

if (addConfiguration && core.Configuration.BasePathExists)
{
_ = self
.AddSingleton(core.Configuration)
.AddSingleton(core.Configuration.Manager)
.AddSingleton<IConfiguration>(provider => provider.GetRequiredService<IConfigurationManager>());
.AddSingleton(core.Configuration)
.AddSingleton(core.Configuration.Manager)
.AddSingleton<IConfiguration>(provider => provider.GetRequiredService<IConfigurationManager>());
}

return self;
Expand Down
Loading