2010-07-25 11 views
5

Mi aplicación debe ser extensible. Para mis propias necesidades, he implementado algunos servicios. Estos servicios se basan en IoC/DI princple. Entonces los servicios encapsulan el concepto de la aplicación.Mejores prácticas para implementar una estrategia addin/addon/plugin

Por ejemplo, hay un IApplicationService. ApplicationService expone información acerca de la aplicación actual que supera. Se especifica el AssemblyInfo y así sucesivamente. Otra exsample es INavigationService (consulte mef.codeplexcom en las muestras). Este servicio proporciona algunas propiedades donde se especifica la información sobre el elemento seleccionado actual y también algunos eventos.

Creo que el "enfoque de servicio" es el más fácil y simplifica los puntos de extensión para la aplicación. Por lo tanto, no estoy seguro de que este sea realmente el mejor enfoque. ¿Qué piensas? ¿Cómo implementaría "puntos de extensión" en una aplicación como complementos/complementos/complementos ...?

Gracias de antemano por sus respuestas! Y lo siento, mi inglés es pobre. ;)

Respuesta

4

¿Está familiarizado con MEF (Managed Extensibility Framework)?

El Framework de Extensibilidad Administrada (o MEF para abreviar) simplifica la creación de aplicaciones extensibles. MEF ofrece capacidades de descubrimiento y composición que puede aprovechar para cargar extensiones de aplicaciones.

0

Sí, estoy familiarizado con MEF. También uso el concepto de MEF, pero hay algunas desventajas. Mi aplicación es similar a IoC/DI y junto con MEF es un poco complicada. MEF no es realmente un contenedor DI, por lo que usar MEF con otro contenedor DI (por ejemplo, ninject, unity, ...) es difícil de implementar. No voy a usar MEF con otros contenedores DI. Entonces mezclar MEF con otros contenedores DI no es realmente bueno.

Espero que pueda entender mi preocupación.

Adición: No es posible cargar extensiones en un dominio de aplicación en MEF. Entonces esto es para mis necesidades no es bueno. System.AddIn o MAF lo admite, pero no usaré System.AddIn porque es muy pesado ...

+2

Si desea agregar información, ** actualice ** su publicación original editándola - no agregue su propia respuesta - hace que sea más difícil de seguir ... –

+0

Sí, MEF es ** no ** a Contenedor DI: dado que su trabajo es diferente de un contenedor DI. Pero estoy en desacuerdo: mezclar MEF y un contenedor DI (como StructureMap o Unity) realmente no es tan difícil y se puede hacer bastante bien. Es posible que deba explicar con más detalle por qué no cree que esto funcione para oyu ..... –

+0

Administrar la carga en un Dominio de aplicación no es trivial y no creo que la mayoría de los marcos de DI manejarán esto tampoco. Todos sus servicios necesitarán un proxy para cruzar el límite de AppDomain, lo que también significa que todas las clases que pasen hacia adelante y hacia atrás deben ser MarshalByRef o Serializable.Puede considerar tener una categoría de extensiones 'confiables' (sin clasificación) y otra categoría de extensiones 'no confiables' que solo acceden a un número limitado de servicios marshaled. –

Cuestiones relacionadas