tengo 2 asambleas:¿El MEF (Framework de extensibilidad administrada) "tipa" el tipado?
de montaje 1:
interface IWeapon {
int Might { get; }
}
[Export("sword")]
public class Sword : IWeapon {
public int Might {
get { return 10; }
}
}
Asamblea 2:
interface IWeapon {
int Might { get; }
}
var catalog = new AssemblyCatalog(typeof(Ninja.Sword).Assembly);
var container = new CompositionContainer(catalog);
// not allowed to use the IWeapon def in assembly 2
var sword = container.GetExportedValue<IWeapon>("sword");
sé cómo conseguir que esto funcione. Puedo pedir el MEF (Framework de extensibilidad administrada) para el objeto, o hacer que exporte el IWeapon correcto en lugar de solo el nombre del objeto.
¿Puede MEF hacer la mecanografía "duck" y devolver un objeto proxy si se implementan todos los puntos de la interfaz?
El problema que veo es de versiones, si el conjunto de la base cambia versiones, todas las extensiones pueden necesitar recompilación. –
Resolvería ese problema moviendo la interfaz a un ensamblaje por separado. La versión de ese ensamblaje debería cambiar solo si el contrato real cambia. –
Sí, he pensado en eso, sigue siendo un poco molesto porque ahora tendré que hacer un seguimiento de 2 ensamblajes diferentes (implementar 2 ensamblajes, etc.), supongo que es la forma correcta de hacer las cosas con .Net –