2013-04-09 5 views
5

In meinem Ninject Bindungsmodul,Wie über die konfigurierten Bindungen von Ninject StandardKernel zum Debuggen iteriert werden?

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] 
    } 
} 

Ich brauche eine Plausibilitätsprüfung Arten zu sehen, ich meine Dienste erfolgreich gebunden haben. Ich habe Probleme beim Zugriff auf die Typnamen der gebundenen Typen. Statt [BindingTarget], würde Ich mag, um zu sehen [Mercedes], [Ferrari], etc ...

Gibt es einen guten und/oder gemeinsamen Weg, dies zu tun?

+0

Können Sie dieses Problem lösen? Ich habe das gleiche Problem, ist es möglich? Das Beste, was ich finden konnte, war in: http://StackOverflow.com/Questions/4680303/Log-Ninject-Resolved-dependencies-Application-Start-up – user3141326

+0

@ user3141326 Ihr Link ist das Beste, was ich bisher gesehen habe. Um Ihre Frage zu beantworten, habe ich noch keine Lösung für dieses Problem gefunden. – Jeff

Antwort

0

In Ihrem IocKernel, Ich würde nur eine Methode fügen Sie die Instanzen einer bestimmten Typ T getAll, und nenne es nach dem Laden Ihre Module zurück:

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) 
       } 
      } 
     }    
    }