Satt och funderade lite grann här. Är inte så jätte välbevandrad inom applikationsprogrammering. Men skulle någon kunna förklara hur följande går till. något i den här stilen kanske funkar: Jepps något åt det hållet var det jag var ute efter.. I .NET 3.5 (eller var det 3.0) finns ju också System.AddIn namespacet, kan eventuellt vara värt att kolla upp. Inget jag använt själv ännu. Det var inte dumt alls detta med System.AddInautomatiskt ladda in från dll en menytext.
Programmet listar upp X-antal standardiserade menyval, om jag sedan säger att alla "add-ons" i form av dll-filer till programmet skall placeras i mappen AddOns. Sedan tänker jag att när jag kör igång programmet skall den per automatik känna av om en ny AddOn finns så att säga och visa ett menyval för denna. Säg att menyvalet är ex. en method i addon-dll:n som då givetvis implementerar något interface och ärver någon specfik klass egenskaper från "huvudprogrammet". class MyAddOn {
// show in menu.
public string Description()
{
return "Ett nytt menyval";
}
}
Om ni har bra tips på vad man skall läsa på om och så, så är det väldigt tacksamt. (dvs. lite mer specifikt.) samt om det skulle funka med ASP.NET-applikationer också. :)
Sv: automatiskt ladda in från dll en menytext.
foreach (var pluginFile in Directory.GetFiles("AddOns", "*.dll"))
{
Assembly asm = Assembly.LoadFile(pluginFile);
foreach (var type in asm.GetTypes())
{
if (typeof(IPlugin).IsAssignableFrom(type))
{
// do something fun with the plugin
}
}
}
Sv:automatiskt ladda in från dll en menytext.
Hitta också en liten summering:
* skapa ett interface som används för att referera till en typ ex. IPlugin. (återfinns i en interop-dll)
* skapa en en klass som implementerar det definierade interfacet (IPlugin)
* i applikationen som skall ladda plugin dll:n lägg till en referens till interop-dll:n
* skapa kod som laddar in och initierar medlemmarna i pluginen.
Det är här din kodsnutt då förmodligen kommer in. Smått moddad:
List<IPlugin> plugins = new List<IPlugin>();
foreach(var pluginFile in Directory.GetFiles("AddOns",*.dll")) {
Assembly ams = Assembly.LoadFile(pluginFile);
foreach(var type in asm.GetTypes()) {
if(typeof(IPlugin).IsAssignableFrom(type)) {
IPlugin instance = Activator.CreateInstance(type);
plugins.add(instance);
}
}
Då bör jag väl ha laddat in en instance av varje plugin i mappen AddOns. Då behöver jag väl i stort sett bara leka på.
Ex. på lek
foreach(IPlugin plugin In plugins) {
Console.WriteLine(plugin.Pluginname);
}
helt otestat.. bara lekt på i huvudet... men är tankesättet någorlunda korrekt?
Sv: automatiskt ladda in från dll en menytext.
Här en random blogpost om vad det innebär:
http://msmvps.com/blogs/kathleen/archive/2008/01/14/system-addin-scenarios.aspxSv:automatiskt ladda in från dll en menytext.
Hittade följande lilla videosnutt:
- http://www.microsoft.com/uk/msdn/screencasts/screencast/315/Managed-AddIn-Framework-Part-1.aspx
Titta!