No discutiré si puedes construir tu propia Fachada en torno a esa clase de terceros. Los autores anteriores tienen razón, la biblioteca podría diseñarse de la manera que no lo permita. Supongamos que tienen algunas clases acopladas que tienen singletons que se deben inicializar en un orden específico o algo así, puede haber muchos errores de diseño (o características) que a los desarrolladores de terceros nunca les importan, porque no suponen que va a utilizar su biblioteca de esa manera.
Pero bien, supongamos que construir una fachada no es una tarea imposible, y de hecho tiene un solo problema: , hay demasiados métodos para escribir envoltorios alrededor de, y no es bueno hacerlo a mano.
veo 3 soluciones para hacer frente a ese problema exactamente
1) supongo que los nuevos tipos "dinámicas" de .NET 4.0 le permitirán Para solucionar ese problema sin tener que escribir "acres de código" Usted debe Incapsule una instancia de una clase de terceros en su clase como un miembro privado con la palabra clave dinámica . Su clase debe derivarse de Dynamic o implementar la interfaz IDynamicObject. Usted tendrá que implementar funciones/SetMember GetMember que reenviará todas las llamadas a la instancia encapsulada de clase tercera parte
Bueno, C# 4.0 es un futuro, Vamos a ver en otras soluciones:
2) No escribir código manualmente si tiene una cantidad significativa de métodos públicos (por ejemplo, más de 100). Escribía una pequeña aplicación de consola que usa la reflexión y encuentra todos los miembros públicos y luego genera código automáticamente para llamar a la instancia encapsulada. Por ejemplo
public type MethodName(params)
{
this.anInstanceOf3rdPartyClass.MethodName(params);
}
3) Se puede hacer lo mismo que 2, pero con la ayuda de herramientas de reflexión existentes, por ejemplo Redgate .NET Reflector. Le ayudará a enumerar todas las clases y firmas de métodos. A continuación, pegue todo esto en Word y una macro simple de VB le permitirá generar el mismo código que podría hacer en 2. Observación: Tan pronto como no copie el código, solo copie las firmas de métodos, que estén disponibles al público , No creo que viole el acuerdo de licencia, pero de todos modos vale la pena volver a verificar
Primera parte: http://blogs.msdn.com/ericlippert/archive/2008/09/26/preventing-third-party-derivation-part-one.aspx –
Segunda parte: http: //blogs.msdn .com/ericlippert/archive/2008/10/06/prevention-third-party-derivation-part-two.aspx –