static void Main(string[] args) { var rootApp = new Program {Log = new ConsoleLog()}; GenericCommandLineParser.SetUp("host" ,val => Hosts.Add(val)); GenericCommandLineParser.SetUp("plugin", val => PluginApps.Add(val)); GenericCommandLineParser.Parse(args); _server = new Server(Hosts.First()); foreach (var host in Hosts.Skip(1)) { _server.AddAddress(host); } var files = Directory.GetFiles(Assembly.GetExecutingAssembly().CodeBase); foreach (var file in files) { try { var asm = Assembly.LoadFrom(file); foreach (var type in asm.GetTypes()) { if (!type.IsClass || type.IsAbstract || type.GetCustomAttributes(typeof (PlugInAttribute), false).Length == 0) continue; var info = (PlugInAttribute)type.GetCustomAttributes(typeof (PlugInAttribute), false)[0]; PlugIns.Add(info.Name, type); } } catch { } } foreach (var app in PluginApps) { var type = PlugIns[app]; var instance = (IPlugIn) Activator.CreateInstance(type); instance.Register(rootApp); InstancesByName.Add(app, instance); } _server.Start(); }