¿Alguien ha comenzado un proyecto para hacer IOC en tiempo de compilación (posiblemente usando Roslyn o Linq MethodInfo emit)?
Mi experiencia con los contenedores de COI ha sido excelente hasta ahora, dejando al descubierto algunos pequeños problemas.
- Muchos contenedores IOC tardan en iniciarse, ya que gran parte de la lógica de resolución ocurre aquí
- A menudo es difícil garantizar que la resolución sea posible, ya que la compilación ya no garantiza que se pueda llamar al constructor
- A menudo, los contenedores de COI agregan una pequeña sobrecarga al tiempo de ejecución (algunos ni siquiera son pequeños, a menudo los que se inician rápidamente se ejecutan lentamente)
Me parece que la solución ideal sería agregar un paso de compilación a la cadena de compilación que agregue una clase Factory en lugar de IOC.
¿Alguien ha hecho esto antes? ¿Si no, porque no?
Dagger para Java / Android hace eso. Se sacrifica algo de magia en tiempo de ejecución (como la de Guice) para ofrecer una experiencia de codegen en tiempo de compilación casi completa, incluida la conversión de la mayoría de los errores de tiempo de ejecución en errores de compilación.
Sería genial en .NET también.
fuente