elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Crear un sistema de plug-Ings y scripts en mi aplicacion
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Crear un sistema de plug-Ings y scripts en mi aplicacion  (Leído 4,405 veces)
Zeroql


Desconectado Desconectado

Mensajes: 957


Todo lo k sucede sucede por una razon


Ver Perfil WWW
Crear un sistema de plug-Ings y scripts en mi aplicacion
« en: 24 Abril 2010, 17:49 »

Buenas....
Bueno esas son mis preguntas...
Quisiera crear un sistema de plugins para mi aplicacion e implementar scripts externos...
Estoy realizando una biblioteca de funciones, pero quisiera que si alguien desea agregar una funcion o script para el mejoramiento de la aplicacion esta se pueda agregar a la aplicacion por medio de plugins y scripts....
Les agradezco mucho la ayuda....


En línea

Dime y lo olvido, enseñame y lo recuerdo, involucrame y lo aprendo.
/.-ZEROQL.-\   -----  #937675#

[D4N93R]
Wiki

Desconectado Desconectado

Mensajes: 1.647


My software never has bugs. Its just features!


Ver Perfil WWW
Re: Crear un sistema de plug-Ings y scripts en mi aplicacion
« Respuesta #1 en: 26 Abril 2010, 16:16 »

Bueno, nunca he hecho algo así, pero se me ocurre una idea ( no se si sea la mejor vía)

1.- Crea una librería de clases, en donde defines un SDK en el cual va a haber las siguientes clases:

       - Un Atributo para identificar las clases del api.
       - Un Clase base para identificar cada clase con la que vas a cargar la libreria y tener los métodos básicos de funcionamiento.

2.- Cuando crees un Addon, lo que haces es Heredar de la clase base y sobreescribir sus metodos base, luego decoras con los atributos, que si para darle un nombre y eso, que se yo xD

3.- Tu aplicacion necesita tener una ruta de Addons, para así escanear las dll (con la extensión que quieras) así agarras y cargas el assembly en memoria y lo ejecutas :D

Creo que de esa manera puedes hacer algo parecido para los scripts..

Saludos!
4.


En línea

raul338


Desconectado Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: Crear un sistema de plug-Ings y scripts en mi aplicacion
« Respuesta #2 en: 26 Abril 2010, 17:07 »

Utiliza las clases Assembly y Reflection, sirven para eso mismo :P

Una vez queria escribir un tutorial sobre como hacer un sistema de plugins (lo se hacer :P, aunque nunca hice un programa "final" que lo implemente :rolleyes:) pero seba123neo me bajoneo con alguien que tenia la misma tecnica en ingles :¬¬ (jajaja es broma :xD)
En línea

Zeroql


Desconectado Desconectado

Mensajes: 957


Todo lo k sucede sucede por una razon


Ver Perfil WWW
Re: Crear un sistema de plug-Ings y scripts en mi aplicacion
« Respuesta #3 en: 26 Abril 2010, 18:57 »

D4N93R me gusta tu idea la implemetare, aunke por ahi encontre un ejemplo de uso de plugins pero vb 6.0, vamos a ver si se puede implementar algo asi en .net

raul338 Gracias por tu aporte, ensayare de amba formas a ver como me va. gracias
En línea

Dime y lo olvido, enseñame y lo recuerdo, involucrame y lo aprendo.
/.-ZEROQL.-\   -----  #937675#

Atrum

Desconectado Desconectado

Mensajes: 65



Ver Perfil WWW
Re: Crear un sistema de plug-Ings y scripts en mi aplicacion
« Respuesta #4 en: 27 Abril 2010, 15:59 »

Hace poco tuve que hacer algo semejante, sinceramente este es un tema que me falta dominar, no es exactamente lo que necesitas , pero tal vez te sirva de algo como ejemplo, la intencion cuando hice esto fue tener controles personalizados con una funcion en especifico, como establecer automaticamente un papel tapiz de acuerdo a la hora, otro control que accesara a datos y presentara un registro de varios usuarios, etc... la especificacion para este proyecto fue que fuera posible que la aplicacion una vez ya implementada fuera posible actualizar las librerias que contienen los controles y agregar mas, asi que utilize este codigo, el cual ya lo tengo publicado en un blog, no se que tan correcto sea hacerlo asi, ya que he leido que lo mejor es cargar los ensamblados en nuevos dominios de aplicacion, pero asi resolvi esto en su momento, espero te sirva de algo.

Para empezar cree un nuevo proyecto de libreria de clases y como medida para estandarizar los nombres de los controles y los nombres de archivo sor los mismos, esto es por que hay que especificar el nombre de la clase que esta dentro del ensamblado (dll) de la cual deseas intanciar un objeto, y pues aqui como todo es dinamico, el intellisense no ayuda.

Asi que cree mi control y posteriormente lo genere, puse esta dll en el mismo directorio de mi aplicacion principal.

Entonces en mi aplicacion principal que seria la que carga los "plug-ins" le agrege esta funcion, si no me equivoco es necesaria la referencia System.Reflection

Código
  1. Public Sub AddAssembly(ByVal Path As String)
  2.  
  3. 'Declaro mi objeto del tipo Assembly, y cargo el fichero
  4. 'El cual es el path donde se ubica mi dll
  5. Dim MyAssembly As Assembly = Assembly.LoadFile(Path)
  6.  
  7. 'Como el nombre de mi control, mi ensamblado y mi clase son iguales
  8. 'la referencia para un control instanciado de la clase MyControl seria
  9. 'MyControl.MyControl asi que aqui simplemente extraigo el nombre de mi
  10. 'archivo sin la extension, se vera algo rudimentario pero funciona :)
  11. Dim sClase As String = MyAssembly.ManifestModule.Name.Split(CChar("."))(0)
  12.  
  13. 'Aqui obtengo la definicion del tipo de dato que tengo en mi Dll
  14. Dim MyExtType As Type = MyAssembly.GetType(sClase & "." & sClase)
  15.  
  16. 'Entonces creo la instancia nueva de acuerdo al tipo de dato obtenido
  17. 'la almaceno en mi objeto tipo object
  18. Dim MyExtObj As Object = Activator.CreateInstance(MyExtType)
  19.  
  20. 'Creo mi tabPage
  21. Dim NewTabPage As New TabPage
  22.  
  23. 'Aqui convierto mi objeto a control, probablemente esto deberia ir en
  24. 'un try catch para obtener alguna exepcion, por ejemplo que la DLL no contenga
  25. 'controles, entonces mi objeto no seria "casteable" a "control"
  26. Dim MyControl As Control = CType(MyExtObj, Control)
  27.  
  28. 'Agrego el nuevo control creado a mi TabPage
  29. NewTabPage.Controls.Add(MyControl)
  30.  
  31. 'Agrego el nuevo TabPage a mi TabControl
  32. form.TabControl1.TabPages.Add(NewTabPage)
  33.  
  34. End Sub

Entonces con un for each  obtuve cada dll de un directorio e intente convertirlo a "control" para agregar cada dll en un tab page nuevo.

El unico problema de esto es que una vez cargado un ensamblado no se puede descargar a menos de que crees un AppDomain para cargarlo ahi y despues descargar el AppDomain. 

Espero esto te de un idea de como hacer tu sistema, y si algo esta mal acepto criticas.

Saludos
En línea

raul338


Desconectado Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: Crear un sistema de plug-Ings y scripts en mi aplicacion
« Respuesta #5 en: 27 Abril 2010, 23:23 »

Exacto!

Que te sirva el codigo de Xtriker como base, Yo lo que hacia en mi "sistemita" era leer todas las dll que estaban dentro de la carpeta "plugins" :P con el Assembly, luego busco por el tipo "PluginInit" y el metodo "Init" que me devolvia un "menu" que ponia en la aplicacion, y bueno, despues ese menu llamaba a su metodo en el plugin correspondiente y eso era todo ;-D

Espero que te sirva la idea al menos, si quieres codigo yo te podre ayudar, lo que pasa es que ahora estoy corto de tiempo, y el codigo que tengo lo tengo que reformar porque lo hice hace mucho y con malas practicas (nombres de variables demasiado cortos, sin comentarios, etc etc :xD)
En línea

MANULOMM


Desconectado Desconectado

Mensajes: 559


Erepublik.com


Ver Perfil
Re: Crear un sistema de plug-Ings y scripts en mi aplicacion
« Respuesta #6 en: 28 Abril 2010, 01:00 »

lo de reflection es lo mejor, pero un recomendación para que no temates buscando metodos en clases que no conces haz por regla que las Dll's que sean PlugIns implementen por obligación una interfaz en la cual defines el metodo de inicio.
De esta forma podras instanciar la Dll de una forma mas sencilla pues conoces el metodo.

Atentamente,

Juan Manuel Lombana
Medellín - Colombia
En línea


raul338


Desconectado Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: Crear un sistema de plug-Ings y scripts en mi aplicacion
« Respuesta #7 en: 28 Abril 2010, 04:19 »

Claro, es una idea mas  "punto netiana" (:huh:) jaja.... mi solucion anterior fue una idea asi, solo que yo implementaba una clase por defecto, es decir. La dll debe tener si o si una clase Plugin con 2 metodos obligatorios: el Init que devuelve el menu con info de otros metodos del plugin y el about :P
En línea

[D4N93R]
Wiki

Desconectado Desconectado

Mensajes: 1.647


My software never has bugs. Its just features!


Ver Perfil WWW
Re: Crear un sistema de plug-Ings y scripts en mi aplicacion
« Respuesta #8 en: 28 Abril 2010, 06:31 »

Exacto, Clases Base, Interfaces, o lo que sea, más Reflection.. es lo mejor para crear el sistema de plugins.. Saludos!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
THX, aplicación para ajustar tu sistema audiovisual doméstico con ....
Noticias
wolfbcn 0 866 Último mensaje 31 Enero 2013, 02:08
por wolfbcn
Ayuda crear scripts
Dudas Generales
Gyru 2 813 Último mensaje 29 Enero 2018, 18:02
por Eleкtro
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines