studio - Sistema con complementos en C#
visual studio installer (7)
Cada sensor debe implementar una interfaz estándar para que las rutinas que manejan listas de sensores puedan tratarlas de manera estándar. Incluya un campo de ID en la interfaz que también sea único para cada tipo de sensor para que pueda manejar casos especiales.
Mire la Reflection API para aprender a escanear un directorio de .NET Assemblies y mirar dentro de ellos.
Cada conjunto debe tener una clase de fábrica que su trabajo es devolver una lista de sensores que están en ese ensamblaje. Te recomiendo que conviertas una subrutina en una función y le pasa una lista que también se agrega. SensorDLL1 agrega 4 sensores a la lista vacía, SensorDLL2 agrega 8 sensores a la lista que ahora tiene 12 sensores, etc. Este enfoque es el más flexible a largo plazo.
Deberá inventar una convención de nomenclatura para encontrar la clase de fábrica o usar un atributo. Nota: No recomiendo solo escanear el ensamblaje para ver todo lo que implementa su interfaz de sensor, ya que podría tener un código dentro de la fábrica que controle qué sensores están disponibles. Esto es útil para licenciar.
Tengo que desarrollar un sistema para monitorear la información del sensor, pero muchos sensores podrían agregarse en el futuro.
Dicho esto, la idea sería desarrollar un sistema que consistiría en el esqueleto de la aplicación. Los sensores (ya que cada uno de ellos tiene sus características de comunicación y presentación de datos) se agregarían como complementos al sistema.
¿Cómo codificaría esto en C #? ¿Es un caso de desarrollo impulsado por componentes? ¿Debo usar bibliotecas dinámicas?
Dependiendo de los sensores en sí, parece que necesitaría definir una única interfaz que todos los sensores implementarán. Su "esqueleto de aplicación" principal funcionará entonces contra la interfaz ISensor y no necesita preocuparse por las implementaciones concretas de cada una de las clases / objetos / componentes del Sensor.
Si cada sensor es simplemente una clase dentro del mismo proyecto, o un ensamblaje separado depende de usted, aunque si son ensamblajes separados, necesitaría una forma de cargar estos ensamblajes dinámicamente.
Algunas referencias que pueden ayudar aquí son:
Patrón de diseño de patrón de comando: - http://en.wikipedia.org/wiki/Command_pattern
Patrón de diseño del patrón observador: - http://en.wikipedia.org/wiki/Observer_pattern
Carga dinámica de ensamblajes: - http://www.divil.co.uk/net/articles/plugins/plugins.asp
Espero que esto ayude.
Echa un vistazo a:
Bloque de aplicaciones UI compuesto y Smart Client Software Factory
Hay una gran cantidad de sistemas ad-hoc plug-in para C #. Uno se describe en la arquitectura de complementos usando C # (en The Code Project ). El enfoque general es que la aplicación host publica un ensamblaje con interfaces. Se enumera a través de una carpeta y encuentra conjuntos que definen una clase que implementa sus interfaces y las carga y crea instancias de las clases.
En la práctica, quieres hacer más. Lo mejor es que la aplicación de host defina dos interfaces, un IHost y un IPlugIn. La interfaz de IHost proporciona servicios a los que un complemento puede suscribirse. El IPlugIn se construye tomando un IHost.
Para cargar un complemento, debe hacer más que simplemente obtener un complemento. Debe enumerar todos los complementos que se pueden cargar. Constrúyelos a cada uno. Pregúntales si pueden correr. Pídales exportar API en el host. Pídales que importen API del host. Los complementos deberían poder preguntar sobre la existencia de otros complementos.
De esta forma, los complementos pueden ampliar la aplicación al ofrecer más API.
Los plugins deben incluir eventos. De esta forma, los complementos pueden monitorear el proceso de carga y descarga de los complementos.
En el fin del mundo, debes advertir a los complementos que se van a ir. Entonces sácalos.
Esto te dejará con una aplicación que se puede escribir en un marco pequeño y se puede implementar completamente en complementos si así lo deseas.
Como una ventaja adicional, también debe hacerlo de modo que en la carpeta de complementos, resuelva accesos directos a complementos. Esto le permite escribir su aplicación y entregársela a otra persona. Pueden crear un complemento en su entorno de desarrollo, crear un acceso directo a él en la carpeta de complementos de la aplicación y no tener que preocuparse por la implementación después de cada compilación.
Managed Extensibility Framework (MEF) es lo que necesita aquí. También puede usar un contenedor de inyección de dependencia , pero eso no es lo que usted esperaría, aunque es una solución perfectamente viable en sí misma.
Es una publicación muy antigua, pero aún así pensé que sería útil que alguien la aplicara. En donde hemos desarrollado un framework con funcionalidad de complemento. aquí permitimos que el complemento modifique la interfaz de usuario de la aplicación principal Horizontal y verticalmente, agregue sus propias páginas, enganche en eventos como Init, OnClick y OnChange.
Una vez hicimos un sistema de complemento en un proyecto escolar nuestro en 2006, Socio. Puedes encontrar el código aquí y aquí .
La lección básica aprendida fue que es muy simple cargar código dinámicamente en C #. Si solo tiene una DLL de complemento y una aplicación que se adhiere a una interfaz suya y enlaces contra una DLL común en la que existe esa interfaz, simplemente funciona ™.
En esencia, es lo que se describe en su respuesta .