5

Usiamo Ninject 3.0 per risolvere una classe. Abbastanza noioso roba standard:Ninject - Come identificare quale classe genera eccezioni durante la costruzione

IKernel kernel = GetKernel(); 
var foo = kernel.Get<IFoo>(); 

Tuttavia su una macchina particolare, stiamo ottenendo un'eccezione quando si costruisce ... qualcosa. Sappiamo cosa sta esplodendo, ma è nel framework di registrazione (Common.Logging), e quel codice è usato in tutto il nostro codebase, in tutti/molti dei costruttori.

Oltre a mettere ogni singolo costruttore in un try/catch e avvolgendo le eccezioni con informazioni di tipo, non ottengo informazioni utili da Ninject su cosa sta avendo problemi con.

C'è un modo in cui posso ottenere da Ninject quale classe non riesce a creare?

Another person asks a similar question, ma la loro soluzione non aiuta - stiamo ottenendo le eccezioni dal framework di registrazione, non da Ninject.

+3

Mostraci la traccia dello stack inclusa la stacktrace delle eccezioni interne. Questa informazione dovrebbe contenere il costruttore della classe che non è riuscita a inizializzare. – Steven

+0

La classe che non è riuscita a inizializzare è esattamente quello che sto cercando di far sapere a Ninject. Non dà quella classe. –

+0

Mi sembra un errore in Ninject. Ninject dovrebbe avvolgere l'eccezione generata. Dovresti segnalare questo come un bug al team di Ninject. – Steven

risposta

-1

Questa non è davvero una soluzione, ma quando ho avuto problemi ho eliminato manualmente le dipendenze del costruttore una alla volta finché non ho trovato la dipendenza del problema. Quando verificherò tutti i lavori senza quella dipendenza, entrerò in quella implementazione concreta. In sostanza, ricorsivamente, dal punto di ingresso, scendo attraverso ogni dipendenza, rimuovendo ogni dipendenza finché non viene identificata la dipendenza non legata. Tiring, ma la forza bruta non mi ha ancora deluso. Anche quando ho incontrato un costruttore privato che è la causa di un problema, non l'avrei mai ottenuto senza la forza bruta. Più comunemente però, è un tipo non legato da qualche parte o un'iniezione condizionale.

+0

Sì, sfortunatamente a volte questo si verifica in sistemi molto grandi - e il numero di dipendenze può arrivare a molte centinaia se non a migliaia. –