2010-03-12 13 views
5

necesito para implementar una arquitectura de plugins dentro de C#/red con el fin de cargar acciones definidasarquitectura plugin en .net:. Descarga

  • usuario personalizadas
  • código de manejo tipo de datos
  • para una red de datos personalizados/conversión/...

a partir de archivos de ensamblado no estáticos.

Dado que la aplicación tiene que manejar muchas acciones personalizadas definidas por el usuario, tengo la necesidad de descargarlas una vez ejecutadas para reducir el uso de memoria.

me encontré con varios artículos sobre buenas arquitecturas plugin, por ejemplo:

pero ninguno de ellos me dio suficiente salchichas para descargar correctamente un montaje.

Como el programa se va a distribuir y las acciones definidas por el usuario (como su nombre indica) definidas por el usuario: ¿cómo impedir que el ensamble ejecute código malicioso (por ejemplo, cerrar mi programa, eliminar archivos)?

¿Hay algún otro inconveniente que alguno de ustedes haya encontrado?

+0

Por lo tanto, una única instancia de su aplicación va a correr el tiempo suficiente para que usted pueda estar preocupado por el uso de memoria? Porque la forma más sencilla es esperar hasta que la aplicación finalice. ¡No funciona tan bien si la aplicación nunca sale! –

+0

así como estoy desarrollando una arquitectura de servidor cliente, al menos el servidor debería funcionar durante mucho tiempo (al menos eso espero :-) –

+1

+1 por usar "salchicha" en su pregunta! – Eccentropy

Respuesta

4

¿Ha pensado en utilizar los complementos y el marco de Extensiblity de MS? http://msdn.microsoft.com/en-us/magazine/cc163476.aspx

Michael

+0

@Michael: ¿este framework maneja el problema de descarga? –

+0

@John: Managed Addin Framework usa AppDomains para implementar la arquitectura del complemento y sí, manejará la descarga. Aunque hay mucho código para escribir, es una buena manera de abstraer la lógica de AppDomain de su código. –

+0

¡Gracias, parece lo que necesito! –

4

Una técnica es cargar los ensamblajes adicionales en un dominio de aplicación separado. Al descargar AppDomain, se descargarán los ensamblajes.

+0

¿Cómo hablarán los ensamblados adicionales en el nuevo Dominio de Aplicación con el contenido del Dominio de Aplicación principal? – BjarkeCK

+0

Vea si [DoCallBack] (http://msdn.microsoft.com/en-US/library/system.appdomain.docallback.aspx) lo ayuda, pero en general, [RTFM] (http://msdn.microsoft. com/en-us/library/System.AppDomain.aspx). –

1

No puede descargar un solo conjunto. Solo puede descargar un grupo de ensambles descargando el AppDomain del que forma parte.

Esto es esencialmente cómo funciona SQL CLR, y ASP.NET - al tener un AppDomain transitorio para ensambles suministrados por el usuario.

Cuestiones relacionadas