This is a simple pluginloader.
example:
Runtime.CreateRuntime(Application.StartupPath + "\\Plugin.dll");
var plugs = Runtime.CreateMultipleInstance<Plugin>();
foreach (var p in plugs)
{
listBox1.Items.Add(p.GetType().Name);
}
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
var p = Runtime.CreateInstanceOf<Plugin>(listBox1.SelectedItem.ToString());
p.Host = this;
p.OnClick();
}
GFU-Schulungen [Anzeige]
ASP.NET Core - Der EinstiegIn nur 3 Tagen lernen Sie, wie man mit ASP.NET Core und den Technologien MVC, Entity Framework, WebAPI und Razor professionelle Web-Anwendungs-Architekturen aufbaut. Diese Schulung ist der perfekte Einstieg, um datengetriebene und präsentations-orientierte Applikationen auf Basis der ASP.NET Core Plattform zu erstellen.
C# AufbaukursSie haben grundlegende .NET- und C#-Kenntnisse und und wollen diese nun erweitern. Der Aufbaukurs C# führt Sie ein die Arbeit mit Interfaces und Delegates, Generics und Parallel Computing.
class Runtime
{
private static Assembly assembly;
public static void CreateRuntime(string ass)
{
assembly = Assembly.LoadFile(ass);
}
[DebuggerStepThrough]
public static t CreateInstance<t>()
{
object returns = null;
foreach (var ty in assembly.GetTypes())
{
if (ty.BaseType == typeof(t))
{
returns = assembly.CreateInstance(ty.FullName);
}
}
if (returns != null)
{
return (t)returns;
}
else
{
throw new Exception("Konnte keine Instanz vom Typ '" + typeof(t).Name + "' erstellen");
}
}
public static Assembly GetAssembly()
{
return assembly;
}
[DebuggerStepThrough]
public static t[] CreateMultipleInstance<t>()
{
List<t> returns = new List<t>();
foreach (var ty in assembly.GetTypes())
{
if (ty.BaseType == typeof(t))
{
returns.Add((t) assembly.CreateInstance(ty.FullName));
}
}
if (returns.Count != 0)
{
return returns.ToArray();
}
else
{
throw new Exception("Konnte keine Instanz vom Typ '" + typeof(t).Name + "' erstellen");
}
}
[DebuggerStepThrough]
public static t CreateInstanceOf<t>(string classname)
{
object returns = null;
foreach (var ty in assembly.GetTypes())
{
if (ty.Name == classname)
{
returns = assembly.CreateInstance(ty.FullName);
}
}
if (returns != null)
{
return (t)returns;
}
else
{
throw new Exception("Konnte keine Instanz vom Typ '" + typeof(t).Name + "' erstellen");
}
}
}
Kommentare zum Snippet