2013-04-09 28 views
5

在我Ninject綁定模塊,如何迭代Ninject StandardKernel的配置綁定以進行調試?

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

我需要一個全面的檢查,看類型我已經成功地綁定到我的服務。我無法訪問綁定類型的類型名稱。取而代之的[BindingTarget],我想看看[Mercedes][Ferrari]等..

有沒有做一個很好的和/或共同的方式?

+0

是你能解決這個問題?我有同樣的問題,這可能嗎?我可以找到最好的是:http://stackoverflow.com/questions/4680303/log-ninject-resolved-dependencies-application-start-up – user3141326 2015-10-09 08:48:14

+0

@ user3141326你的鏈接是我迄今見過的最好的東西。要回答你的問題,我還沒有找到解決這個問題的辦法。 – Jeff 2015-10-12 19:22:27

回答

0

在你IocKernel,I D只需添加到GETALL給定類型T的實例的方法,並呼籲它回到你的加載模塊後,:

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) 
       } 
      } 
     }    
    } 
相關問題