C# Dll plugins

inginheiiro

Power Member
Boas,

Este é dedicado ao takumi, que se queixa que não contribuo para a comunidade...


Assunto:
Como fazer uso da API do .NET, neste caso o C# para criar aplicações que consigam carregar
na sua execução módulos de plugin.

Resumindo, uma aplicação ser capaz de carregar DLL's.

1. Fazendo uso do System.Reflection
2. Fazendo uso do que se deveria aprender na escolinha (ouviste BRABO???)
3. Imaginação...

Basta criar-mos uma classe de interface do genero:

Código:
public interface IBasePlugin
	{
		string pluginName();
		string pluginDescription();
		void addParameter(object key, object value);
		object execute();
	}

posteriormente, podemos criar as DLL's desde que obedeçam ao interface.

exemplo:

public class PluginHelloWorld : IBasePlugin
{
public PluginHelloWorld()
{
}

#region IBasePlugin Members

public string pluginName()
{
return "HelloWorldPlugIn";
}

public string pluginDescription()
{
return "Este plugin só escreve a frase Hello World no ecran...";
}

public void addParameter(object key, object value)
{
// Não são necessários parametros.
return;
}

public object execute()
{
Console.WriteLine("Hello World");
return null;
}

#endregion
}

.


finalmente na nossa aplicação, criamos uma aplicação que leia de um directorio, as DLL's que implementem um dado interface, e instanciamo-las...

fazemos isto á custa do Reflection...



eis o pedaço de Src code que faz isso.

static void loadPlugins()
{
Assembly assembly= null;
try
{
// Directorio das DLL's Plugins...
AppDomain.CurrentDomain.AppendPrivatePath("PlugIns_Dlls");
string path= AppDomain.CurrentDomain.BaseDirectory+"PlugIns_Dlls";
DirectoryInfo info= new DirectoryInfo(path);
if (!info.Exists)
throw new Exception("Não existem DLL no directorio "+path);

string[] dir= Directory.GetFiles(path,"*.dll");
foreach (string s in dir)
{
string dll= Path.GetFileNameWithoutExtension(s);
if (!dll.Equals("InterfaceModule")){
assembly= Assembly.Load(dll);
Type[] types= assembly.GetTypes();
foreach(Type t in types)
{
try
{

if (t.GetInterface("PlugInTutorial.Interfaces.IBasePlugin")!= null)
{
object obj= Activator.CreateInstance(t);

if (!t.Name.Equals("PluginHelloWorld"))
((PlugInTutorial.PlugIns.PluginToUpperCase )obj).addParameter("str","funcionou o ToUpperCase");
_PlugIns.Add(obj);
}
}

catch(Exception e)
{
throw new Exception ("Erro no carregamento do plugin ..."+e.Message );
}
}
}
}
}
catch(Exception e)
{
throw new Exception ("Plugin Error "+e.Message );
}




eu fiz um projecto em VS 2003 com o src code todo ...
download http://bragatel.pt/coredump/PlugInTutorial.zip

caso tenham duvidas amanha respondo, pois hoje não tenho muito tempo.
 
Última edição:
Back
Topo