Files
mirror-processhacker/branches/ph-plugins/ProcessHacker.Base/ApplicationInstance.cs
T
wj32 8d04581007 added plugin support
git-svn-id: svn://svn.code.sf.net/p/processhacker/code@2149 21ef857c-d57f-4fe0-8362-d861dc6d29cd
2009-10-12 03:09:16 +00:00

60 lines
1.7 KiB
C#

using System;
using System.Collections.Generic;
using System.Reflection;
using System.Text;
namespace ProcessHacker.Base
{
public sealed class ApplicationInstance
{
private Dictionary<string, PluginBase> _plugins = new Dictionary<string, PluginBase>();
private ProcessWindowManager _processWindow = new ProcessWindowManager();
public ProcessWindowManager ProcessWindow
{
get { return _processWindow; }
}
public void AddPlugin(PluginBase plugin)
{
if (_plugins.ContainsKey(plugin.Name))
throw new InvalidOperationException("The plugin has already been loaded.");
plugin.AppInstance = this;
plugin.OnLoad();
_plugins.Add(plugin.Name, plugin);
}
public PluginBase GetPlugin(string name)
{
if (!_plugins.ContainsKey(name))
return null;
return _plugins[name];
}
public void LoadPlugin(string fileName)
{
Assembly assembly = Assembly.LoadFile(fileName);
foreach (var type in assembly.GetTypes())
{
if (type.IsPublic && type.IsSubclassOf(typeof(PluginBase)))
{
this.AddPlugin((PluginBase)Activator.CreateInstance(type));
}
}
}
public void RemovePlugin(PluginBase plugin)
{
if (!_plugins.ContainsKey(plugin.Name))
throw new InvalidOperationException("The plugin is not loaded.");
plugin.OnUnload();
_plugins.Remove(plugin.Name);
}
}
}