Informace:
- Umožňuje snadné vytváření, načítání a používání vlastních pluginů v aplikaci
- Možnost volání funkcí, vlastností, událostí, zdrojů z pluginu
- Má široké použití (lokalizace, čistě pro zdroje (obrázky, zvuky..), vlastní formuláře, úprava UI atd.
Použité prog. jazyky: C# (.net 4.5)
Stažení verze: 1.1 + doc
Značky: ,
using mimic.PluginLoader;
namespace mimic.Plugin
{
public class Plugin : PluginBase
{
public override string Guid
{
get { return "VlastniGuid"; }
}
}
}using mimic.PluginLoader;
using System;
namespace mimic.Plugin
{
public class Plugin : PluginBase
{
public override string Guid
{
get { return "VlastniGuid"; }
}
public override string Author
{
get { return "mimic"; }
}
public override string Description
{
get { return "Základní informace"; }
}
public override Version Version
{
get { return new Version(1, 1, 0); }
}
}
}using mimic.PluginLoader;
using System.Windows.Forms;
namespace mimic.Plugin
{
public class Plugin : PluginBase
{
private Form form;
public override string Guid
{
get { return "Commands"; }
}
// ve formuláři se musí předat instance
public override void ParentForm(Form form)
{
this.form = form;
}
protected override void CommandReceiver(string command)
{
switch (command)
{
// ukončí furmulář
case "close":
if (form != null)
form.Close();
break;
// odebere tento plugin
case "unload":
PluginLoader.PluginLoader.Unload(Guid);
break;
}
}
}
}
using mimic.PluginLoader;
using System;
using System.Drawing;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace mimic.Plugin
{
public class Plugin : PluginBase
{
private Random r = new Random();
private Form form;
public override string Guid
{
get { return "WindowColorChaos"; }
}
public Plugin()
{
// při odebrání pluginu je nutné odebrat i události na formulář a
// nastavít původní barvu formuláře
OnDeactivated += () =>
{
if (form != null)
{
form.Paint -= Paint;
form.BackColor = Color.FromKnownColor(KnownColor.Control);
form.Invalidate();
}
};
}
// ve formuláři se musí předat instance
public override void ParentForm(Form form)
{
if (form != null)
{
this.form = form;
// přidá se funkce do události pro vykreslení na formulář
this.form.Paint += Paint;
// automaticky bude překreslovat formulář každých 500ms
PeriodicRepaint(500);
}
}
// je voláno událostí pro vykreslení na formulář
private void Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
// vygeneruje náhodnou barvu na pozadí formuláře
g.Clear(Color.FromArgb(r.Next(0, 255), r.Next(0, 255), r.Next(0, 255)));
}
private async void PeriodicRepaint(int delay)
{
// dokud formulář bude existovat a plugin bude načten
while (!form.IsDisposed && IsActivated)
{
form.Invalidate();
await Task.Delay(delay);
}
}
}
}
// bude automaticky každou 1s kontrolovat adresář "libs" jestli se nějaký
// plugin přidal nebo odebral
PluginLoader.AutoDetect(true, "libs");
// načte jeden plugin
PluginLoader.Load("C:\\Plugin.dll");
// načte všechny pluginy v adresáři "libs"
PluginLoader.LoadPlugins("libs");
// odebere načtený plugin podle jeho GUID
PluginLoader.Unload("GuidPluginu");
// odebere všechny načtené pluginy
PluginLoader.UnloadPlugins();
// odešle všem pluginům příkaz "close" (co se má stát je na každém pluginu)
PluginLoader.SendCommand("close");
// získá plugin podle jeho GUID
IPlugin myPlugin = PluginLoader.Get("GuidPluginu");
// zavolá funkci "Vypis" s parametrem "Ahoj světe", která je umístěná v pluginu
myPlugin.Func("Vypis", "Ahoj světe");
// nastaví vlastnost "Cislo" na hodnotu 100 (vlastnost je typu INT), která je opět
// umístěná v pluginu
myPlugin.Property("Cislo", 100);
// získá hodnotu z vlastnosti "Cislo"
int cislo = myPlugin.Property<int>("Cislo");
// získá hodnotu z "TEXT" ze zdroje v Properties
string text1 = myPlugin.Res().GetString("TEXT");
// získá hodnotu z "TEXT" z vlastního zdroje
string text2 = myPlugin.Res("MyResource").GetString("TEXT");
// předá formulář do pluginu
myPlugin.ParentForm(this);
// odešle příkaz pouze tomuto pluginu
myPlugin.SendCommand("show");