IOC compilazione

9

Qualcuno ha avviato un progetto per fare IOC in fase di compilazione (probabilmente usando l'emit di metodo Roslyn o Linq MethodInfo)?

La mia esperienza con i contenitori IOC è stata finora eccezionale, a parte alcuni piccoli problemi

  1. Molti contenitori IOC sono lenti all'avvio, in quanto gran parte della logica di risoluzione si verifica qui
  2. Spesso è difficile garantire che la risoluzione sia possibile, poiché la compilazione non garantisce più che il costruttore possa essere chiamato
  3. Spesso i contenitori IOC aggiungono un piccolo overhead al runtime (alcuni non sono nemmeno piccoli, spesso quelli che si avviano rapidamente si avviano lentamente)

Mi sembra che la soluzione ideale sarebbe aggiungere un passaggio compilato alla catena di build che aggiunge una classe Factory anziché IOC.

Qualcuno l'ha già fatto prima? In caso contrario, perché no?

    
posta ArTs 09.04.2014 - 10:17
fonte

2 risposte

4

Fare questo non dovrebbe essere un problema. Esegui la stessa logica IoC e invece di istanziare le classi, emetti il codice che crea l'istanza.

Ma facendo questo, stai rimuovendo un enorme vantaggio di IoC: possibilità di cambiare il modo in cui i coponenti sono composti senza dover ricompilare l'intera applicazione. Semplicemente sostituendo la configurazione, è possibile fare in modo che l'applicazione utilizzi diversi servizi o origini dati. E mentre non ho ancora visto un'applicazione che possa sfruttare appieno questa capacità, è ancora una parte importante del successo di IoC.

    
risposta data 09.04.2014 - 12:18
fonte
3

Dagger per Java / Android lo fa. Sacrifica alcune magie di runtime (come Guice) per offrire un'esperienza codegen quasi completa in fase di compilazione, compresa la conversione di molti errori di runtime in errori di compilazione.

Sarebbe bello anche su .NET.

    
risposta data 14.04.2014 - 23:00
fonte

Leggi altre domande sui tag