diff --git a/BusCommPractice/BusCommPractice.sln b/BusCommPractice/BusCommPractice.sln
new file mode 100644
index 0000000..91cb806
--- /dev/null
+++ b/BusCommPractice/BusCommPractice.sln
@@ -0,0 +1,22 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.0.31903.59
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BusCommPracticeConsoleApp", "BusCommPracticeConsoleApp\BusCommPracticeConsoleApp.csproj", "{774DE3C5-A5D0-4130-B696-AA8E6D924EB0}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {774DE3C5-A5D0-4130-B696-AA8E6D924EB0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {774DE3C5-A5D0-4130-B696-AA8E6D924EB0}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {774DE3C5-A5D0-4130-B696-AA8E6D924EB0}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {774DE3C5-A5D0-4130-B696-AA8E6D924EB0}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+EndGlobal
diff --git a/BusCommPractice/BusCommPracticeConsoleApp/BusCommPracticeConsoleApp.csproj b/BusCommPractice/BusCommPracticeConsoleApp/BusCommPracticeConsoleApp.csproj
new file mode 100644
index 0000000..2150e37
--- /dev/null
+++ b/BusCommPractice/BusCommPracticeConsoleApp/BusCommPracticeConsoleApp.csproj
@@ -0,0 +1,10 @@
+
+
+
+ Exe
+ net8.0
+ enable
+ enable
+
+
+
diff --git a/BusCommPractice/BusCommPracticeConsoleApp/Models/IMessageBus.cs b/BusCommPractice/BusCommPracticeConsoleApp/Models/IMessageBus.cs
new file mode 100644
index 0000000..2db6394
--- /dev/null
+++ b/BusCommPractice/BusCommPracticeConsoleApp/Models/IMessageBus.cs
@@ -0,0 +1,9 @@
+namespace BusCommPracticeConsoleApp.Models
+{
+ public interface IMessageBus
+ {
+ void Subscribe(Action subscriber);
+ void Unsubscribe(Action subscriber);
+ void Publish(string message);
+ }
+}
\ No newline at end of file
diff --git a/BusCommPractice/BusCommPracticeConsoleApp/Models/MessageBus.cs b/BusCommPractice/BusCommPracticeConsoleApp/Models/MessageBus.cs
new file mode 100644
index 0000000..a083c5b
--- /dev/null
+++ b/BusCommPractice/BusCommPracticeConsoleApp/Models/MessageBus.cs
@@ -0,0 +1,26 @@
+
+namespace BusCommPracticeConsoleApp.Models
+{
+ public class MessageBus : IMessageBus
+ {
+ private readonly List> _subscribers = new List>();
+
+ public void Publish(string message)
+ {
+ foreach (var subscriber in _subscribers)
+ {
+ subscriber(message);
+ }
+ }
+
+ public void Subscribe(Action subscriber)
+ {
+ _subscribers.Add(subscriber);
+ }
+
+ public void Unsubscribe(Action subscriber)
+ {
+ _subscribers.Remove(subscriber);
+ }
+ }
+}
\ No newline at end of file
diff --git a/BusCommPractice/BusCommPracticeConsoleApp/Models/Publisher.cs b/BusCommPractice/BusCommPracticeConsoleApp/Models/Publisher.cs
new file mode 100644
index 0000000..db8b686
--- /dev/null
+++ b/BusCommPractice/BusCommPracticeConsoleApp/Models/Publisher.cs
@@ -0,0 +1,18 @@
+namespace BusCommPracticeConsoleApp.Models
+{
+ public class Publisher
+ {
+ private readonly IMessageBus _messageBus;
+
+ public Publisher(IMessageBus messageBus)
+ {
+ _messageBus = messageBus;
+ }
+
+ public void SendMessage(string message)
+ {
+ Console.WriteLine($"[LOG] Publisher: Sending Message - {message}");
+ _messageBus.Publish(message);
+ }
+ }
+}
\ No newline at end of file
diff --git a/BusCommPractice/BusCommPracticeConsoleApp/Models/Subscriber.cs b/BusCommPractice/BusCommPracticeConsoleApp/Models/Subscriber.cs
new file mode 100644
index 0000000..b81db67
--- /dev/null
+++ b/BusCommPractice/BusCommPracticeConsoleApp/Models/Subscriber.cs
@@ -0,0 +1,18 @@
+namespace BusCommPracticeConsoleApp.Models
+{
+ public class Subscriber
+ {
+ private readonly string _name;
+
+ public Subscriber(IMessageBus messageBus, string name)
+ {
+ _name = name;
+ messageBus.Subscribe(ReceiveMessage);
+ }
+
+ private void ReceiveMessage(string message)
+ {
+ Console.WriteLine($"{_name}: Received Message - {message}");
+ }
+ }
+}
\ No newline at end of file
diff --git a/BusCommPractice/BusCommPracticeConsoleApp/Program.cs b/BusCommPractice/BusCommPracticeConsoleApp/Program.cs
new file mode 100644
index 0000000..c30bf2d
--- /dev/null
+++ b/BusCommPractice/BusCommPracticeConsoleApp/Program.cs
@@ -0,0 +1,27 @@
+using BusCommPracticeConsoleApp.Models;
+
+namespace BusCommPracticeConsoleApp;
+
+class Program
+{
+ static void Main(string[] args)
+ {
+ IMessageBus messageBus1= new MessageBus();
+ IMessageBus messageBus2= new MessageBus();
+
+ var subscriber1 = new Subscriber(messageBus1, "Sub1");
+ var subscriber2 = new Subscriber(messageBus1, "Sub2");
+ var subscriber3 = new Subscriber(messageBus2, "Sub3");
+
+ var publisher1 = new Publisher(messageBus1);
+ var publisher2 = new Publisher(messageBus2);
+
+ publisher1.SendMessage("Hello, Bus!");
+ publisher1.SendMessage("I'm publisher 1");
+
+ publisher2.SendMessage("Hello, Bus!");
+ publisher2.SendMessage("I'm publisher 2");
+
+ Console.ReadLine();
+ }
+}