2015-11-18 379 views
2

我正在嘗試使用Ninject與我的應用程序日誌包裝。Ninject通過構造函數參數typeof類實現接口

這裏是包裝:

public class NLogLogger : ILogger 
{ 
    private readonly Logger _logger; 

    public NLogLogger(Type t) 
    { 
     _logger = LogManager.GetLogger(t.Name); 
    } 
} 

正如你可以看到我傳遞的類型分爲伐木者constrctor,所以我會用它像下面這樣:

public class EntityObject 
{ 
    public ILogger Logger { get; set; } 

    public EntityObject() 
    { 
     Logger = new NLogLogger(typeof(EntityObject)); 
    } 
} 

現在我似乎無法瞭解如何使用Ninject做類似的事情。 這裏是我的綁定模塊:

public class LoggerModule : NinjectModule 
{ 
    public override void Load() 
    { 
     Bind<ILogger>().To<NLogLogger>(); 
    } 
} 

現在很明顯,我得到拋出,因爲它不能注入類型到構造異常。任何想法我可以做到這一點?

錯誤激活類型

沒有匹配的綁定是可用的,並且類型不是自可綁定。

激活路徑:

4)依賴型注射入NLogLogger型的構造的參數t

3)依賴ILogger注射到型NzbGetSettingsService

2)射出的構造的參數記錄器依賴關係ISettingsService {NzbGetSettingsDto}轉換爲DashboardController類型的構造函數的參數nzbGetService

1)請求DashboardController

回答

2

假設你的類是這樣的:

public class EntityObject 
{ 
    public ILogger Logger { get; set; } //it is better by the way to convert this into a private field 

    public EntityObject(ILogger logger) 
    { 
     Logger = logger; 
    } 
} 

您需要註冊您的NLogLogger這樣的:

Bind<ILogger>().To<NLogLogger>() 
    .WithConstructorArgument(
     typeof(Type), 
     x => x.Request.ParentContext.Plan.Type); 
+0

真棒,謝謝。我一直在拉我的頭髮! –