public static void Main(string[] args) { string[] pluginFilesArray = Directory.GetFiles("plugins/", "*.dll"); ArrayList pluginFiles = new ArrayList(pluginFilesArray); pluginFiles.Add("../Plugins/SensorNodeInputPlugin/build/net5.0/SensorNodeInputPlugin.dll"); pluginFiles.Add("../Plugins/MenuOutputPlugin/build/net5.0/MenuOutputPlugin.dll"); // Use this line to add a plugin that is not within the plugin subfolder // dlls within the plugin folder are loaded automatically //pluginFiles.Add(@"D:\Dokumente\Programmieren\UpdateDeutschland\middleware\PluginSrc\BasicInputPlugin\build\net5.0\BasicInputPlugin.dll"); //pluginFiles.Add(@"D:\Dokumente\Programmieren\UpdateDeutschland\middleware\PluginSrc\BasicOutputPlugin\build\net5.0\BasicOutputPlugin.dll"); foreach (string pluginFile in pluginFiles) { var DLL = Assembly.LoadFile(Path.GetFullPath(pluginFile)); Console.WriteLine("dll exported types: " + DLL.GetExportedTypes().Length); foreach (Type type in DLL.GetExportedTypes()) { try { var c = Activator.CreateInstance(type); IPlugin plugin = (IPlugin)c; plugins.AddFirst(plugin); Console.WriteLine("found plugin: " + type); } catch (Exception e) { if (!(e.GetType() == typeof(MissingMethodException))) { Console.WriteLine(e.ToString()); Console.WriteLine("invalid plugin found: " + type); } else { Console.WriteLine("ignored invalid interface class"); } } } } MessageBusBuilder builder = MessageBusBuilder.Create() .WithSerializer(new JsonMessageSerializer()) .WithDependencyResolver(new LookupDependencyResolver(type => { if (handlerResolver.ContainsKey(type)) { return(handlerResolver[type]); } else if (type == typeof(ILoggerFactory)) { return(null); } else { Console.WriteLine("other type!! " + type); } throw new InvalidOperationException(); })); foreach (IPlugin plugin in plugins) { builder = plugin.initBus(builder); Dictionary <System.Type, object> pluginHandlers = plugin.getHandlerResolvers(); foreach (KeyValuePair <System.Type, object> entry in pluginHandlers) { if (handlerResolver.ContainsKey(entry.Key)) { Console.WriteLine("ERROR, Handler Resolver already contained!"); throw new Exception("ERROR, Handler Resolver already contained!"); } handlerResolver[entry.Key] = entry.Value; } } bus = builder .Do(builder => { builder.WithProviderMemory(new MemoryMessageBusSettings { EnableMessageSerialization = true }); }) .Build(); foreach (IPlugin plugin in plugins) { plugin.setMessageBus(bus); } foreach (IPlugin plugin in plugins) { var pluginTask = Task.Factory.StartNew(plugin.loop, CancellationToken.None, TaskCreationOptions.LongRunning, TaskScheduler.Default); Console.WriteLine("started plugin loop " + plugin); } //TestPlugin.setMessageBus(bus); //var produceTask = Task.Factory.StartNew(TestPlugin.loop, CancellationToken.None, TaskCreationOptions.LongRunning, TaskScheduler.Default); //produceTask.Start(); while (true) { Thread.Sleep(100); } }