2013-04-09 10 views
5

Nel mio modulo di rilegatura Ninject,Come eseguire iterazioni sui collegamenti configurati di Ninject StandardKernel per eseguire il debug?

public class CarModule : NinjectModule 
{ 
    public override void Load() 
    { 
     Kernel.Bind(scanner => scanner.FromThisAssembly().SelectAllClasses() 
       .InheritedFrom<ICar>().BindAllInterfaces()); 

     foreach (var binding in kernel.GetBindings(typeof(ICar))) 
     { 
      Trace.WriteLine(string.Format("[{0}] Service bound to [{1}]", 
         binding.Service.Name, 
         binding.Target.GetType().Name)); 
     } 

     // Output looks like: 
     //[ICar] Service bound to [BindingTarget] 
     //[ICar] Service bound to [BindingTarget] 
     //[ICar] Service bound to [BindingTarget] 
    } 
} 

Ho bisogno di un controllo di integrità per vedere i tipi che ho legato con successo per i miei servizi. Ho problemi ad accedere ai nomi dei tipi dei tipi associati. Invece di [BindingTarget], mi piacerebbe vedere [Mercedes], [Ferrari], ecc ...

Esiste un modo buono e/o comune per fare questo?

+0

stati in grado di risolvere questo problema? Sto avendo lo stesso problema, è possibile? Il meglio che ho trovato è stato in: http://stackoverflow.com/questions/4680303/log-ninject-resolved-dependencies-application-start-up – user3141326

+0

@ user3141326 il tuo link è la cosa migliore che ho visto finora. Per rispondere alla tua domanda, non ho ancora trovato una soluzione a questo problema. – Jeff

risposta

0

Nella tua IocKernel, io d basta aggiungere un metodo per getall le istanze di un determinato tipo T, e lo chiamo di nuovo dopo il caricamento del modulo:

public static class IocKernel 
    { 
     private static StandardKernel _kernel;       

     public static IEnumerable<T> GetAll<T>() 
     { 
      return _kernel.GetAll<T>(); 
     }  

     public static void Initialize(params INinjectModule[] modules) 
     { 
      if (_kernel == null) 
      { 
       _kernel = new StandardKernel(modules); 

       List<ICar> bindingsList= _kernel.GetAll<ICar>().ToList(); 
       foreach(ICar binding in bindingsList) 
       { 
        Trace.WriteLine(string.Format("Service bound to [{1}]", binding.GetType().Name) 
       } 
      } 
     }    
    } 
Problemi correlati