via slideshare sistema resumen membrana lectinas las funciones complemento complejo clasica ataque alterna c# plugins

slideshare - Patrón/Método para la funcionalidad del complemento C#



via clasica del complemento (3)

Casi cualquier arquitectura "plug-in" se basará en alguna variante de un patrón de Builder, prácticamente por definición.

Estoy trabajando en un nuevo producto que eventualmente tendrá diferentes funcionalidades basadas en los requisitos individuales del cliente. Por lo tanto, me gustaría implementar la capacidad de tener complementos que pueda implementar y la aplicación central detectará los complementos y los modificará en consecuencia. El truco es que el producto probablemente se dirigirá a versiones anteriores de .Net que no son compatibles con System.Addin o la posibilidad de MEF.

Dicho esto, ¿qué patrones / métodos de programación se prestan bien para soportar complementos en C #? Me gustaría mantenerme alejado de los marcos de terceros por completo, aunque no dude en nombrar uno. Idealmente, me gustaría tener la capacidad de agregar un complemento, modificar el menú principal y / o un menú contextual y / o proporcionar un nuevo servicio. En Java esto se manejó muy bien a través de puntos de extensión. ¿Estoy básicamente atascado para escribir mi propio administrador de puntos de extensión?


Desea ver el espacio de nombres System.Reflection para ayudarlo en esta tarea. Un enfoque sería crear una interfaz común para sus clases de complemento ( patrón de estrategia de búsqueda ) y luego usar la reflexión en tiempo de ejecución para ver todos los dll en una carpeta determinada (tal vez donde esté el ejecutable o una carpeta de complemento especial) tomando nota de las clases que contienen esa interfaz particular. En específico, mantenga un diccionario de los tipos (los que tienen su interfaz especial que lo designa como una clase de complemento). Una vez que tenga una lista de esos tipos que contienen la interfaz que los designa como un complemento, puede crear instancias dinámicas a voluntad utilizando la clase System.Activator. Realice la búsqueda inicial de las clases complementarias al inicio de la aplicación y luego use una fábrica abstracta para cargar el complemento según el tipo o algún otro metadato que pueda atribuirse a la clase utilizando los atributos .net.

Si necesita ejemplos de código específicos, puedo hacerlo por usted, pero debe tomarse el tiempo para familiarizarse con los atributos System.Reflection, System.Activator y .net si tiene la intención de crear un sistema de complemento robusto y flexible.

¡Disfrutar!


Soy una persona de Java, pero como su pregunta está relacionada con los patrones de diseño de software ...

El patrón de estrategia es probablemente lo que te ayudará aquí, en un nivel muy abstracto. Entonces, tal vez su aplicación principal tiene un conjunto muy básico de "estrategias" que usa para operar ... en lugar de, por ejemplo, crear una barra de menú, usted llama a un objeto de estrategia de barra de menús para crearlo por usted. Luego, proporcione métodos para intercambiar estrategias (por lo tanto, implementar un complemento sería esencialmente una cuestión de invocar un conjunto de métodos setStrategy () sobre los objetos afectados, o como prefiera). El complemento proporcionaría estrategias alternativas. En cuanto a la carga en tiempo de ejecución de las clases de complementos, no estoy lo suficientemente familiarizado con C # para responder a esto.

Como dije antes, todo esto es muy abstracto. Intente evitar la reflexión tanto como sea posible; aunque a veces es necesario, existen desventajas de rendimiento, seguridad y diseño al usar la reflexión.

¡Espero que ayude!