Develope Application support plug-in
How application that support plug-in ?
1. application knows some fixed interfaces.
2. plug-in class must implement the fixed interface.
3. using reflection mechanism to dynamic load plug-in.
so, the step:
1. define fixed interface.
2. develope plug-in class that implement the fixed interface.
3. main application dynamic load the plug-in.
e.g.
// ---------------- Fixed plugIn Interface--------------------
namespace PlugIn
{
public interface IPlugIn
{
void ShowInfo();
}
}
namespace PlugIn
{
public interface IPlugIn
{
void ShowInfo();
}
}
// ------- PlugIn Module ------------
using PlugIn;
namespace PlugInModule
{
public class Class : IPlugIn
{
#region IPlugIn Members
void IPlugIn.ShowInfo()
{
MessageBox.Show("This class implement IPlugIn interface", "PlugInModule");
}
#endregion
}
}
using PlugIn;
namespace PlugInModule
{
public class Class : IPlugIn
{
#region IPlugIn Members
void IPlugIn.ShowInfo()
{
MessageBox.Show("This class implement IPlugIn interface", "PlugInModule");
}
#endregion
}
}
// ------------ Main Application ----------
private void PlugIn_Click(object sender, EventArgs e)
{
OpenFileDialog dlg = new OpenFileDialog();
if (dlg.ShowDialog() == DialogResult.OK)
{
Assembly asm = Assembly.LoadFrom(dlg.FileName);
Type[] asmTypes = asm.GetTypes();
for (int i = 0; i < asmTypes.Length; i++)
{
Type interfaceType = asmTypes[i].GetInterface("IPlugIn");
if (interfaceType != null)
{
object objInstance = asm.CreateInstance(asmTypes[i].FullName);
IPlugIn IPlug = objInstance as IPlugIn;
if (IPlug != null)
{
listBox1.Items.Add(asmTypes[i].FullName);
IPlug.ShowInfo();
}
}
}
}
}
private void PlugIn_Click(object sender, EventArgs e)
{
OpenFileDialog dlg = new OpenFileDialog();
if (dlg.ShowDialog() == DialogResult.OK)
{
Assembly asm = Assembly.LoadFrom(dlg.FileName);
Type[] asmTypes = asm.GetTypes();
for (int i = 0; i < asmTypes.Length; i++)
{
Type interfaceType = asmTypes[i].GetInterface("IPlugIn");
if (interfaceType != null)
{
object objInstance = asm.CreateInstance(asmTypes[i].FullName);
IPlugIn IPlug = objInstance as IPlugIn;
if (IPlug != null)
{
listBox1.Items.Add(asmTypes[i].FullName);
IPlug.ShowInfo();
}
}
}
}
}
That's all!
Fine Day!