/// <summary> /// Adds an assembly to the instance. /// </summary> /// <param name="filename">The file path to the assembly.</param> public void AddAssembly(string filename) { //Prepare AddOnFactory factory = null; string directory = Path.GetDirectoryName(filename); //Create or get factory... if (!factories.ContainsKey(directory)) { //Create factory = new AddOnFactory() { AddOnDirectory = directory }; factories.Add(directory, factory); } else { factory = factories[directory]; } //Load Assembly try { factory.LoadAssembly(filename); } catch (Exception ex) { Console.WriteLine(ex.Message + Environment.NewLine + ex.StackTrace); } }
/// <summary> /// Retrieves all <see cref="AddOnFactory"/> instances within the container. /// </summary> /// <returns>An array of <see cref="AddOnFactory"/> loaded by the container.</returns> public AddOnFactory[] GetFactories() { //Get Factories AddOnFactory[] factories = new AddOnFactory[this.factories.Count]; this.factories.Values.CopyTo(factories, 0); return(factories); }
private void Factory_InitializeAddOn(AddOnFactory factory, string assemblyName, string typeFullName, IHost host) { //Create IAddOn addOn = factory.CreateInstance <IAddOn>(assemblyName, typeFullName); addOn.Initialize(host); //Add addOns.Add(addOn); }
private void Factory_InitializeContextMenuItem(AddOnFactory factory, string assemblyName, string typeFullName, IHost host) { //Create IContextMenuItem <TMap, TEntry, TXbox> contextMenuItem = factory.CreateInstance <IContextMenuItem <TMap, TEntry, TXbox> >(assemblyName, typeFullName); contextMenuItem.Initialize(host); //Add addOns.Add(contextMenuItem); haloAddOns.Add(contextMenuItem); contextMenuItems.Add(contextMenuItem); }
private void Factory_InitializeTabPage(AddOnFactory factory, string assemblyName, string typeFullName, IHost host) { //Create ITabPage <TMap, TEntry, TXbox> tabPage = factory.CreateInstance <ITabPage <TMap, TEntry, TXbox> >(assemblyName, typeFullName); tabPage.Initialize(host); //Add addOns.Add(tabPage); haloAddOns.Add(tabPage); xboxAddOns.Add(tabPage); tabPages.Add(tabPage); }
private void Factory_InitializeMenuButton(AddOnFactory factory, string assemblyName, string typeFullName, IHost host) { //Create IMenuButton <TMap, TEntry, TXbox> menuButton = factory.CreateInstance <IMenuButton <TMap, TEntry, TXbox> >(assemblyName, typeFullName); menuButton.Initialize(host); //Add addOns.Add(menuButton); haloAddOns.Add(menuButton); xboxAddOns.Add(menuButton); menuButtons.Add(menuButton); }
private void Factory_InitializeTool(AddOnFactory factory, string assemblyName, string typeFullName, IHost host) { //Create ITool <TMap, TEntry, TXbox> tool = factory.CreateInstance <ITool <TMap, TEntry, TXbox> >(assemblyName, typeFullName); tool.Initialize(host); //Add addOns.Add(tool); haloAddOns.Add(tool); xboxAddOns.Add(tool); tools.Add(tool); }
private void Factory_FilterInterfaces(AddOnFactory factory, IHost host) { //Check Types foreach (Type type in factory.GetAddOnTypes()) { //Prepare... var halo = type.GetInterface(typeof(IHaloAddOn <TMap, TEntry>).Name); var tool = type.GetInterface(typeof(ITool <TMap, TEntry, TXbox>).Name); var xbox = type.GetInterface(typeof(IDebugXboxAddOn <TXbox>).Name); var menuButton = type.GetInterface(typeof(IMenuButton <TMap, TEntry, TXbox>).Name); var contextMenuItem = type.GetInterface(typeof(IContextMenuItem <TMap, TEntry, TXbox>).Name); var tabPage = type.GetInterface(typeof(ITabPage <TMap, TEntry, TXbox>).Name); var assemblyName = type.Assembly.GetName().Name; if (!errors.ContainsKey(factory)) { errors.Add(factory, new List <Exception>()); } //Check Halo based AddOns if (halo != null) { using (var haloAddOn = factory.CreateInstance <IHaloAddOn <TMap, TEntry> >(assemblyName, type.FullName)) if (haloAddOn != null && haloAddOn.Version == version) { //Initialize... try { if (tool != null) { Factory_InitializeTool(factory, assemblyName, type.FullName, host); } if (menuButton != null) { Factory_InitializeMenuButton(factory, assemblyName, type.FullName, host); } if (contextMenuItem != null) { Factory_InitializeContextMenuItem(factory, assemblyName, type.FullName, host); } if (tabPage != null) { Factory_InitializeTabPage(factory, assemblyName, type.FullName, host); } } catch (Exception ex) { errors[factory].Add(ex); } } } } }
private void deleteButton_Click(object sender, EventArgs e) { //Prepare int count = addOnListView.SelectedItems.Count; AddOnFactory[] factories = new AddOnFactory[count]; ListViewItem[] items = new ListViewItem[count]; //Loop through selected items for (int i = 0; i < count; i++) { items[i] = addOnListView.Items[addOnListView.SelectedIndices[i]]; if (items[i].Tag is AddOnFactory factory) { factories[i] = factory; } } //Remove Directories foreach (AddOnFactory factory in factories) { Program.Container.RemoveDirectory(factory.AddOnDirectory); } //Delete Directories? bool failed = false; try { for (int i = 0; i < count; i++) { Directory.Delete(factories[i].AddOnDirectory, true); addOnListView.Items.Remove(items[i]); } } catch { failed |= true; } //Check if (failed) { if (MessageBox.Show("The directories cannot be deleted. The application must be in safe-mode to delete. " + "Would you like to restart the program in safe mode?", "Restart required", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { Security.Restart("-s"); Application.Exit(); } } }
private void Factory_FilterInterfaces(AddOnFactory factory, IHost host) { //Check Types foreach (Type type in factory.GetAddOnTypes()) { //Prepare... var addOn = type.GetInterface(typeof(IAddOn).Name); var assemblyName = type.Assembly.GetName().Name; //Check Settings page if (addOn != null) { Factory_InitializeAddOn(factory, assemblyName, type.FullName, host); } } }
public void EnableAddOnFactory(AddOnFactory factory) { Native.EnableAddOnFactory(factory); }