//var files = Directory.GetFiles(Path.GetDirectoryName(Application.ExecutablePath), "*.dll", SearchOption.AllDirectories); //List<myClass> commands = new List<myClass>(); //foreach (string file in files) //{ // i++; // Assembly commandAssembly = Assembly.Load(Path.GetFileNameWithoutExtension(file)); // if (commandAssembly != null) // { // foreach (Type type in commandAssembly.GetTypes()) // { // if (type.BaseType != null && type.BaseType.FullName == typeof(myClass).FullName) // { // commands.Add((myClass)Activator.CreateInstance(type)); // } // } // } //} private void Form1_Load(object sender, System.EventArgs e) { var files = Directory.GetFiles(Path.GetDirectoryName(Application.ExecutablePath), "*.dll", SearchOption.AllDirectories); List <ImyClass> commands = new List <ImyClass>(); List <IPlugin> assemblies = new List <IPlugin>(); List <ToolStripItem> mMenu = new List <ToolStripItem>(); foreach (string file in files) { IPlugin plug = null; Assembly commandAssembly = Assembly.Load(Path.GetFileNameWithoutExtension(file)); if (commandAssembly != null) { Type ObjType = null; ObjType = commandAssembly.GetType(Path.GetFileNameWithoutExtension(file) + ".PlugIn"); if (ObjType != null) { plug = (IPlugin)Activator.CreateInstance(ObjType); plug.Host = this; //plug.Menu = "I sent this from main"; Console.WriteLine("ipi.Add(1,2)=" + plug.Add(1, 2)); assemblies.Add(plug); //For classes List <ToolStripItem> sMenuList = new List <ToolStripItem>(); //get all clases implementing Itest //var types = AppDomain.CurrentDomain.GetAssemblies() // .SelectMany(s => s.GetTypes()) // .Where(p => typeof(ImyClass).IsAssignableFrom(p) && p.IsInterface == false); var types = commandAssembly.GetTypes() .Where(p => typeof(ImyClass).IsAssignableFrom(p) && p.IsInterface == false); foreach (Type type in types) { ImyClass myCls = (ImyClass)Activator.CreateInstance(type); commands.Add(myCls); sMenuList.Add(myCls.Menu); // plug.Menu.DropDownItems.Add(myCls.Menu); } // ToolStripMenuItem ms = new ToolStripMenuItem("ab", null, sMenu.ToArray()); plug.Menu.DropDownItems.AddRange(sMenuList.ToArray()); mMenu.Add(plug.Menu); } } } this.menuStrip1.Items.AddRange(mMenu.ToArray()); }
//var files = Directory.GetFiles(Path.GetDirectoryName(Application.ExecutablePath), "*.dll", SearchOption.AllDirectories); //List<myClass> commands = new List<myClass>(); //foreach (string file in files) //{ // i++; // Assembly commandAssembly = Assembly.Load(Path.GetFileNameWithoutExtension(file)); // if (commandAssembly != null) // { // foreach (Type type in commandAssembly.GetTypes()) // { // if (type.BaseType != null && type.BaseType.FullName == typeof(myClass).FullName) // { // commands.Add((myClass)Activator.CreateInstance(type)); // } // } // } //} private void abc() { var files = Directory.GetFiles(Path.GetDirectoryName(Application.ExecutablePath), "*.dll", SearchOption.AllDirectories); List <myClass> commands = new List <myClass>(); List <IPlugin> assemblies = new List <IPlugin>(); List <ToolStripItem> mMenu = new List <ToolStripItem>(); foreach (string file in files) { IPlugin plug = null; Assembly commandAssembly = Assembly.Load(Path.GetFileNameWithoutExtension(file)); if (commandAssembly != null) { Type ObjType = null; ObjType = commandAssembly.GetType(Path.GetFileNameWithoutExtension(file) + ".PlugIn"); if (ObjType != null) { plug = (IPlugin)Activator.CreateInstance(ObjType); plug.Host = this; //plug.Menu = "I sent this from main"; Console.WriteLine("ipi.Add(1,2)=" + plug.Add(1, 2)); assemblies.Add(plug); //For classes List <ToolStripItem> sMenu = new List <ToolStripItem>(); foreach (Type type in commandAssembly.GetTypes()) { if (type.BaseType != null && type.BaseType.FullName == typeof(myClass).FullName) { myClass myCls = (myClass)Activator.CreateInstance(type); commands.Add(myCls); sMenu.Add(myCls.Menu); plug.Menu.DropDownItems.Add(myCls.Menu); } } // ToolStripMenuItem ms = new ToolStripMenuItem("ab", null, sMenu.ToArray()); // plug.Menu.DropDownItems.Add(sMenu.ToArray()); mMenu.Add(plug.Menu); } } } this.menuStrip1.Items.AddRange(mMenu.ToArray()); }