diff --git a/src/Core/WinSWCore/Configuration/YamlConfiguration.cs b/src/Core/WinSWCore/Configuration/YamlConfiguration.cs index 8fcf06a..10e41d3 100644 --- a/src/Core/WinSWCore/Configuration/YamlConfiguration.cs +++ b/src/Core/WinSWCore/Configuration/YamlConfiguration.cs @@ -648,6 +648,12 @@ namespace WinSW.Configuration { var result = new List(0); var extensions = this.ExtensionsConfiguration; + + if (extensions is null) + { + return result; + } + var extensionConfigListObject = new ObjectQuery(extensions).ToList(); foreach (var item in extensionConfigListObject) diff --git a/src/Core/WinSWCore/Extensions/AbstractWinSWExtension.cs b/src/Core/WinSWCore/Extensions/AbstractWinSWExtension.cs index e5108a7..097ad33 100644 --- a/src/Core/WinSWCore/Extensions/AbstractWinSWExtension.cs +++ b/src/Core/WinSWCore/Extensions/AbstractWinSWExtension.cs @@ -1,4 +1,5 @@ using WinSW.Configuration; +using WinSW.Util; namespace WinSW.Extensions { @@ -10,7 +11,7 @@ namespace WinSW.Extensions public WinSWExtensionDescriptor Descriptor { get; set; } #pragma warning restore CS8618 // Non-nullable field is uninitialized. Consider declaring as nullable. - public virtual void Configure(IWinSWConfiguration descriptor, object settings) + public virtual void Configure(IWinSWConfiguration descriptor, ObjectQuery settings) { // Do nothing } diff --git a/src/Core/WinSWCore/Extensions/ExtensionConfigurationProvider.cs b/src/Core/WinSWCore/Extensions/ExtensionConfigurationProvider.cs index b90b813..11e12aa 100644 --- a/src/Core/WinSWCore/Extensions/ExtensionConfigurationProvider.cs +++ b/src/Core/WinSWCore/Extensions/ExtensionConfigurationProvider.cs @@ -34,6 +34,12 @@ namespace WinSW.Extensions var result = new List(0); var extensions = this.serviceDescriptor.ExtensionsConfiguration; + + if (extensions is null) + { + return result; + } + var extensionNodes = new ObjectQuery(extensions).ToList(); foreach (var extension in extensionNodes) diff --git a/src/Core/WinSWCore/Extensions/IWinSWExtension.cs b/src/Core/WinSWCore/Extensions/IWinSWExtension.cs index 653bf43..e9e2556 100644 --- a/src/Core/WinSWCore/Extensions/IWinSWExtension.cs +++ b/src/Core/WinSWCore/Extensions/IWinSWExtension.cs @@ -1,4 +1,5 @@ using WinSW.Configuration; +using WinSW.Util; namespace WinSW.Extensions { @@ -26,7 +27,7 @@ namespace WinSW.Extensions /// Init handler. Extension should load it's config during that step /// /// Service descriptor - void Configure(IWinSWConfiguration descriptor, object settings); + void Configure(IWinSWConfiguration descriptor, ObjectQuery settings); /// /// Start handler. Called during startup of the service before the child process. diff --git a/src/Core/WinSWCore/Extensions/WinSWExtensionConfiguration.cs b/src/Core/WinSWCore/Extensions/WinSWExtensionConfiguration.cs index 62f02b0..e730148 100644 --- a/src/Core/WinSWCore/Extensions/WinSWExtensionConfiguration.cs +++ b/src/Core/WinSWCore/Extensions/WinSWExtensionConfiguration.cs @@ -1,3 +1,5 @@ +using WinSW.Util; + namespace WinSW.Extensions { public class WinSWExtensionConfiguration @@ -8,9 +10,9 @@ namespace WinSW.Extensions public string ClassName { get; set; } - public object Settings { get; set; } + public ObjectQuery Settings { get; set; } - public WinSWExtensionConfiguration(string id, bool enabled, string className, object settings) + public WinSWExtensionConfiguration(string id, bool enabled, string className, ObjectQuery settings) { this.Id = id; this.Enabled = enabled; @@ -18,4 +20,4 @@ namespace WinSW.Extensions this.Settings = settings; } } -} \ No newline at end of file +} diff --git a/src/Core/WinSWCore/Extensions/WinSWExtensionManager.cs b/src/Core/WinSWCore/Extensions/WinSWExtensionManager.cs index 631bcbb..e00508a 100644 --- a/src/Core/WinSWCore/Extensions/WinSWExtensionManager.cs +++ b/src/Core/WinSWCore/Extensions/WinSWExtensionManager.cs @@ -136,10 +136,6 @@ namespace WinSW.Extensions throw new ExtensionException(id, "Cannot get the configuration entry"); } - Console.WriteLine(configNode.Id); - Console.WriteLine(configNode.ClassName); - Console.WriteLine(configNode.Enabled); - var descriptor = new WinSWExtensionDescriptor(configNode.Id, configNode.ClassName, configNode.Enabled); if (descriptor.Enabled) { diff --git a/src/Plugins/RunawayProcessKiller/RunawayProcessKillerExtension.cs b/src/Plugins/RunawayProcessKiller/RunawayProcessKillerExtension.cs index 0fbcaf2..e67abb2 100644 --- a/src/Plugins/RunawayProcessKiller/RunawayProcessKillerExtension.cs +++ b/src/Plugins/RunawayProcessKiller/RunawayProcessKillerExtension.cs @@ -179,14 +179,12 @@ namespace WinSW.Plugins.RunawayProcessKiller return parameters.Environment; } - public override void Configure(IWinSWConfiguration descriptor, object settings) + public override void Configure(IWinSWConfiguration descriptor, ObjectQuery settings) { - var configQuery = new ObjectQuery(settings); - - this.Pidfile = configQuery.On("pidfile").ToString(); - this.StopTimeout = TimeSpan.FromMilliseconds(int.Parse(configQuery.On("stopTimeOut").ToString())); - this.StopParentProcessFirst = configQuery.On("StopParentFirst").ToBoolean(); - this.CheckWinSWEnvironmentVariable = configQuery.On("checkWinSWEnvironmentVariable").ToBoolean(); + this.Pidfile = settings.Get("pidfile").ToString(); + this.StopTimeout = TimeSpan.FromMilliseconds(int.Parse(settings.Get("stopTimeOut").ToString())); + this.StopParentProcessFirst = settings.Get("StopParentFirst").ToBoolean(); + this.CheckWinSWEnvironmentVariable = settings.Get("checkWinSWEnvironmentVariable").ToBoolean(); this.ServiceId = descriptor.Id; } diff --git a/src/Plugins/SharedDirectoryMapper/SharedDirectoryMapper.cs b/src/Plugins/SharedDirectoryMapper/SharedDirectoryMapper.cs index 5514f04..c4e24d1 100644 --- a/src/Plugins/SharedDirectoryMapper/SharedDirectoryMapper.cs +++ b/src/Plugins/SharedDirectoryMapper/SharedDirectoryMapper.cs @@ -26,18 +26,16 @@ namespace WinSW.Plugins.SharedDirectoryMapper this._entries.Add(config); } - public override void Configure(IWinSWConfiguration descriptor, object settings) + public override void Configure(IWinSWConfiguration descriptor, ObjectQuery settings) { - var configObject = new ObjectQuery(settings); - - var maps = configObject.On("mapping").ToList(); + var maps = settings.Get("mapping").ToList(); foreach (var map in maps) { var mapObject = new ObjectQuery(map); - var enable = mapObject.On("enabled").ToBoolean(); - var label = mapObject.On("label").ToString(); - var uncpath = mapObject.On("uncpath").ToString(); + var enable = mapObject.Get("enabled").ToBoolean(); + var label = mapObject.Get("label").ToString(); + var uncpath = mapObject.Get("uncpath").ToString(); var config = new SharedDirectoryMapperConfig(enable, label, uncpath); this._entries.Add(config); diff --git a/src/Test/winswTests/YamlExtensionTest.cs b/src/Test/winswTests/YamlExtensionTest.cs index 6a01e5a..c5df24a 100644 --- a/src/Test/winswTests/YamlExtensionTest.cs +++ b/src/Test/winswTests/YamlExtensionTest.cs @@ -3,6 +3,7 @@ using WinSW; using WinSW.Configuration; using WinSW.Extensions; using WinSW.Plugins.RunawayProcessKiller; +using WinSW.Util; using winswTests.Extensions; namespace winswTests @@ -27,7 +28,7 @@ extensions: enabled: yes classname: ""{this.testExtension}"" settings: - pidfile: foo/bar/pid.txt + pidfile: pid.txt stopTimeOut: 5000 StopParentFirst: true"; @@ -50,5 +51,19 @@ extensions: Assert.AreEqual(5000, extension.StopTimeout.TotalMilliseconds, "Loaded Stop Timeout is not equal to the expected one"); Assert.AreEqual(true, extension.StopParentProcessFirst, "Loaded StopParentFirst is not equal to the expected one"); } + + [Test] + public void Sample_test() + { + ExtensionConfigurationProvider provider = new ExtensionConfigurationProvider(this._testServiceDescriptor); + var config = provider.GetExtenstionConfiguration("killOnStartup"); + var pid = config.Settings.On("pidfile").ToString(); + var stopTimeOut = config.Settings.Get("stopTimeOut").ToString(); + var StopParentFirst = config.Settings.Get("StopParentFirst").ToString(); + + System.Console.WriteLine(pid); + System.Console.WriteLine(stopTimeOut); + System.Console.WriteLine(StopParentFirst); + } } }