Hace algunas semanas dando vueltas me encontré con la forma de poder hacer que una aplicación soporte plug-ins . todo esto gracias al namespace System.Addin.
gracias a la documentación de la gente del blog de De esta herramienta . voy a pasar a explicarles como funciona todo esto.
The Pipeline
es el componente que se encarga de la comunicación entre nuestra aplicación y el complemento. este “canal ” es creado dinámicamente por MAF a través de un conjunto de componentes debidamente acoplados que se utilizan para la versión ,marhal y transformar los datos a medida que pasan entre el la aplicación y cada uno de los completos que se encuentran cargados.
Cada parte del pipeline se encuentra en un ensamblado diferente cargado según sea necesario para administrar el complemento. MAF descubre automáticamente cada componente y después los carga mediante reflexión .
Para mayor fiabilidad , MAF permite cierto nivel de insolación entre el completo y la aplicación host , todo a la derecha del Contract se carga en el AppDomain(), y todo a la derecha se carga en un nuevo AppDomain con sus permisos de seguridad establecidos .
En el Pipeline ahí tres partes principales partiendo desde el Contract en el centro .
Contract
Como ya pueden darse cuenta MAF esta basados en interfaces; de que otra forma ?.
Por Ejemplo el Contract para un traductor seria algo así:
[AddInContract] public interface ITranslator : IContract { string Translate(string input); }
La interfaz deriva de IContract, lo que es un requisito para las nuestras interfaces. y es lo que sirve de “apoyo ” en el pipeline cuando este se inicia. también esta tiene que estar decorada con el atributo [AddInContract] para poder decirle a MAF cual es el(los) Contract a utilizar en la construcción del pipeline. Ambos la interfaz IContract y el Atributo [AddInContract] están en el namespace System.AddIn.Pipeline en System.AddIn.Contract.dll.
Hasta aquí por hoy ya tengo algo de sueño en los próximos días seguiré explicando que son los views y los adapters . …..