¿Patrón de diseño para implementar plugins en tu aplicación?

¿Cuál es la forma estándar de permitir e implementar un sistema de complementos para su aplicación?

En mi última aplicación, hice una interfaz simple para todos los complementos que deben implementar. Luego cargo todos los ensamblajes en el directorio de aplicaciones y descarto cualquiera que no implemente esa interfaz.

Uno de los métodos en la interfaz es un método DoWork () que se invoca periódicamente en todos los ensamblados cargados para realizar cualquier acción que puedan tener los complementos.

¿Cuál es la forma "adecuada" de hacer un sistema de plugin? ¿Acaba de crear una interfaz para plugins? ¿Debería llamar periódicamente a un método particular en todos los complementos? ¿Hay alguna forma más sofisticada?

EDITAR:

Gracias Matt Hamilton por la referencia al espacio de nombres System.Addin. Esta será la forma más probable de implementar mis complementos. Sin embargo, sigo sintiendo curiosidad por la arquitectura de los complementos en general y no me importaría conocer de antemano la mejor forma en que deberían diseñarse, implementarse ... cómo debe llamarlos una vez cargados, etc.

Respuestas a la pregunta(4)

Su respuesta a la pregunta