diff --git a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsSetup.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsSetup.cs index 9413289c8..bc9363642 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsSetup.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsSetup.cs @@ -20,6 +20,7 @@ using Barotrauma.Networking; using Barotrauma.Steam; using FluentResults; using ImpromptuInterface; +using LightInject; using Microsoft.Toolkit.Diagnostics; namespace Barotrauma @@ -181,7 +182,7 @@ namespace Barotrauma servicesProvider.RegisterServiceType(ServiceLifetime.Transient); servicesProvider.RegisterServiceType(ServiceLifetime.Transient); servicesProvider.RegisterServiceType(ServiceLifetime.Singleton); - servicesProvider.RegisterServiceType(ServiceLifetime.Singleton); + servicesProvider.RegisterServiceResolver(factory => factory.GetInstance() as ILuaCsHook); servicesProvider.RegisterServiceType(ServiceLifetime.Singleton); servicesProvider.RegisterServiceType(ServiceLifetime.Singleton); servicesProvider.RegisterServiceType(ServiceLifetime.Singleton); diff --git a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Services/ServicesProvider.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Services/ServicesProvider.cs index 65f79bb17..37e454431 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Services/ServicesProvider.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Services/ServicesProvider.cs @@ -100,6 +100,19 @@ public class ServicesProvider : IServicesProvider } } + public void RegisterServiceResolver(Func factory) where TSvcInterface : class, IService + { + try + { + _serviceLock.EnterReadLock(); + ServiceContainer.Register(f => factory(ServiceContainer)); + } + finally + { + _serviceLock.ExitReadLock(); + } + } + public void Compile() { try diff --git a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Services/_Interfaces/IServicesProvider.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Services/_Interfaces/IServicesProvider.cs index cce7a24c7..901f3de4a 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Services/_Interfaces/IServicesProvider.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Services/_Interfaces/IServicesProvider.cs @@ -37,7 +37,14 @@ public interface IServicesProvider /// Args[1]: Implementing type /// event System.Action OnServiceRegistered; - + + /// + /// Registers a factory for resolving the service type. + /// + /// + /// + void RegisterServiceResolver(Func factory) where TSvcInterface : class, IService; + /// /// Runs compilation of registered services. ///