Hace un par de días vi el uso del CoClassAttribute de una forma que no había imaginado antes.Interfaces de "actualización"
[ComImport, CoClass(typeof(Foo)), Guid("787C1303-AE31-47a2-8E89-07C7257B1C43")]
interface IFoo {
void Bar();
}
class Foo : IFoo {
public void Bar() {
Console.WriteLine("Oh retado!");
}
}
siendo utilizados como:
class CoClassDemo {
public static void Show() {
var a = new IFoo();
a.Bar();
}
}
Eso debería no me han sorprendido desde el interoperabilidad COM hace exactamente eso desde los primeros días de .NET Framework. Simplemente no le he prestado tanta atención cuando exploro el código COM Interop en .NET Reflector.
method public hidebysig static void Show() cil managed
{
.maxstack 1
.locals init (
[0] class ConsoleApplication1.IFoo a)
L_0000: nop
L_0001: newobj instance void ConsoleApplication1.Foo::.ctor()
L_0006: stloc.0
L_0007: ldloc.0
L_0008: callvirt instance void ConsoleApplication1.IFoo::Bar()
L_000d: nop
L_000e: ret
}
Lo que pasa es que fuera del contexto de interoperabilidad COM, inmediatamente me imaginé esta siendo utilizado como inyección de dependencias en tiempo de compilación de un pobre hombre .
Todo lo que hay que hacer es deshacerse del prefijo "I" convencional en el nombre de la interfaz (al igual que COM Interop).
entonces sería una cuestión de cambiar el atributo Coclase para intercambiar una implementación para otro, burlándose, etc.
dos inconvenientes que veo por adelantado están teniendo que volver a compilar (que más o menos escenarios de prueba los límites de tiempo de desarrollo) y eventuales problemas que rodean las dependencias circulares cuando las interfaces y las implementaciones se implementan en diferentes conjuntos.
¿Alguien ha jugado con esta técnica? ¿Algún otro inconveniente? Otros usos?
¿Alguna vez asistió a clase de compras en la escuela secundaria? "Usa la herramienta correcta para el trabajo correcto." Es una mala idea usar una herramienta diseñada para la interoperabilidad COM para hacer algo totalmente diferente. Eso hace que tu código sea imposible de entender para el siguiente tipo que tiene que mantenerlo. Recuerda, el próximo tipo probablemente seas tú, años después de que hayas olvidado exactamente por qué hiciste esta locura. –