Skip to content

Commit a44f853

Browse files
authored
Merge pull request #30 from longkerdandy/feature/fix-message-ordering
Fix message ordering and improve dependency injection
2 parents d0d7766 + b6cef97 commit a44f853

File tree

15 files changed

+753
-544
lines changed

15 files changed

+753
-544
lines changed

.gitignore

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,4 +60,7 @@ nunit-*.xml
6060
!.idea/codeStyles/
6161

6262
# VS Code IDE
63-
.vscode/
63+
.vscode/
64+
65+
# Trae IDE
66+
.trae/

SparklerNet.Samples/Program.cs

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
1+
using Microsoft.Extensions.DependencyInjection;
2+
using Microsoft.Extensions.Logging;
13
using Serilog;
24
using Serilog.Extensions.Logging;
5+
using SparklerNet.HostApplication;
6+
using SparklerNet.HostApplication.Caches;
37
using SparklerNet.Samples.Profiles;
48

59
namespace SparklerNet.Samples;
@@ -26,9 +30,35 @@ public static async Task Main(string[] args)
2630
var mqttOptions = profile.GetMqttClientOptions();
2731
var sparkplugOptions = profile.GetSparkplugClientOptions();
2832

29-
// Create logger factory and host application
33+
// Create the logger factory
3034
using var loggerFactory = new SerilogLoggerFactory(Log.Logger);
31-
var hostApp = new SimpleHostApplication(mqttOptions, sparkplugOptions, loggerFactory);
35+
36+
// Create the dependency injection container
37+
var services = new ServiceCollection();
38+
39+
// Register the singleton services
40+
services.AddSingleton(mqttOptions);
41+
services.AddSingleton(sparkplugOptions);
42+
services.AddSingleton(loggerFactory);
43+
services.AddSingleton<ILoggerFactory>(loggerFactory);
44+
45+
// Register cache services
46+
services.AddMemoryCache();
47+
services.AddHybridCache();
48+
49+
// Register the SparklerNet services
50+
services.AddSingleton<IMessageOrderingService, MessageOrderingService>();
51+
services.AddSingleton<IStatusTrackingService, StatusTrackingService>();
52+
services.AddSingleton<SparkplugHostApplication>();
53+
54+
// Register the SimpleHostApplication
55+
services.AddSingleton<SimpleHostApplication>();
56+
57+
// Build service provider
58+
var serviceProvider = services.BuildServiceProvider();
59+
60+
// Resolve SimpleHostApplication from the container
61+
var hostApp = serviceProvider.GetRequiredService<SimpleHostApplication>();
3262
hostApp.SubscribeToEvents();
3363

3464
// Handle console input and process commands

SparklerNet.Samples/SimpleHostApplication.cs

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
using SparklerNet.Core.Constants;
44
using SparklerNet.Core.Events;
55
using SparklerNet.Core.Model;
6-
using SparklerNet.Core.Options;
76
using SparklerNet.HostApplication;
87
using SparklerNet.HostApplication.Extensions;
98
using static SparklerNet.Core.Constants.SparkplugMessageType;
@@ -22,13 +21,11 @@ public class SimpleHostApplication
2221
/// <summary>
2322
/// Initializes a new instance of the SimpleHostApplication class.
2423
/// </summary>
25-
/// <param name="mqttOptions">MQTT client options</param>
26-
/// <param name="sparkplugOptions">Sparkplug client options</param>
27-
/// <param name="loggerFactory">Logger factory to create required loggers</param>
28-
public SimpleHostApplication(MqttClientOptions mqttOptions, SparkplugClientOptions sparkplugOptions,
29-
ILoggerFactory loggerFactory)
24+
/// <param name="hostApplication">The Sparkplug Host Application instance.</param>
25+
/// <param name="loggerFactory">Logger factory to create required loggers.</param>
26+
public SimpleHostApplication(SparkplugHostApplication hostApplication, ILoggerFactory loggerFactory)
3027
{
31-
_hostApplication = new SparkplugHostApplication(mqttOptions, sparkplugOptions, loggerFactory);
28+
_hostApplication = hostApplication;
3229
_logger = loggerFactory.CreateLogger<SimpleHostApplication>();
3330
_isRunning = false;
3431
}

SparklerNet.Samples/SparklerNet.Samples.csproj

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,12 @@
88
</PropertyGroup>
99

1010
<ItemGroup>
11-
<ProjectReference Include="..\SparklerNet\SparklerNet.csproj"/>
12-
<PackageReference Include="Serilog" Version="4.3.0"/>
13-
<PackageReference Include="Serilog.Sinks.Console" Version="6.1.1"/>
14-
<PackageReference Include="Serilog.Extensions.Logging" Version="9.0.2"/>
15-
<PackageReference Include="MQTTnet" Version="5.0.1.1416"/>
11+
<ProjectReference Include="..\SparklerNet\SparklerNet.csproj" />
12+
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="9.0.10" />
13+
<PackageReference Include="MQTTnet" Version="5.0.1.1416" />
14+
<PackageReference Include="Serilog" Version="4.3.0" />
15+
<PackageReference Include="Serilog.Sinks.Console" Version="6.1.1" />
16+
<PackageReference Include="Serilog.Extensions.Logging" Version="9.0.2" />
1617
</ItemGroup>
1718

1819
</Project>

0 commit comments

Comments
 (0)