2013-02-04 292 views
0

我有我經常使用的方法,以這樣的依賴注入泛型類

public Result<User> ValidateUser(string email, string password) 

返回結果有ILoggingService接口Result類日誌服務注入,但我沒有找到一個方法一般Result<T>通用類注入實際的實施。

我試着執行下面的代碼,但是TestLoggingService intance沒有注入到LoggingService屬性中。它總是返回null。任何想法如何解決它?

using (var kernel = new StandardKernel()) 
      {    
       kernel.Bind<ILoggingService>().To<TestLoggingService>(); 
       var resultClass = new ResultClass(); 
       var exception = new Exception("Test exception"); 
       var testResult = new Result<ResultClass>(exception, "Testing exception", true);     
      } 


     public class Result<T> 
     { 

      [Inject] 
      public ILoggingService LoggingService{ private get; set; } //Always get null 


      protected T result = default(T); 
      //Code skipped 




      private void WriteToLog(string messageToLog, object resultToLog, Exception exceptionToLog) 
      { 

       LoggingService.Log(....); //Exception here, reference is null 



     } 

回答

2

您正在使用new手動創建實例。 Ninject只會注入由kernel.Get()創建的對象。此外,您似乎嘗試將某些東西注入不推薦的DTO中。更好地做類記錄創造了結果:

public class MyService 
{ 
    public MyService(ILoggingService loggingService) { ... } 

    public Result<T> CalculateResult<T>() 
    { 
     Result<T> result = ... 
     _loggingService.Log(...); 
     return result; 
    } 
} 
+0

可ResolutionExtensions.Get幫助我在這種情況下?我在任何地方都找不到有關ResolutionExtensions中的方法的說明。 – Tomas

+0

+1 @Tomas閱讀並相信答案 - Remo在他的建議中是正確的。你引用的方法最好被認爲是相當於'Kernel.Get()' –