2015-08-23 103 views
1

我有一個WCF Web服務託管在我的本地IIS上(不是Express)。我在其根目錄中包含了一個Global.asax,它應該是。由於我使用Ninject和WCF擴展,因此Global類擴展NinjectHttpApplication而不是HttpApplication(如here所示)。 此外,我正在使用AutoMapper庫來規避編寫枯燥的樣板代碼。 問題出現是因爲我定義的用於配置AutoMapper的靜態方法沒有被調用,導致AutoMapper在我調用Mapper.Map()時拋出異常。該靜態方法的調用在Global.asax的Application_Start()方法中定義,因爲我希望這些映射在每個Web服務的生命週期中執行一次。順便說一下,Ninject的CreateKernel()方法被調用得很好。 我在這裏錯過了什麼嗎?我試過調試它,即使我已經將調試器附加到w3wp.exe,並且也試圖在其正文中放置一個明確的Debugger.Break()調用,但它並未達到斷點。Global.asax的Application_Start方法沒有被調用

這是它的樣子至今:

的Global.asax

<%@ Application Codebehind="Global.asax.cs" Inherits="MyApp.WebHost.Global" Language="C#" %> 

的Global.asax.cs

public class Global : NinjectHttpApplication 
{ 
    protected override IKernel CreateKernel() 
    { 
     IKernel kernel = new StandardKernel(); 

     /* various bindings */ 

     return kernel; 
    } 

    protected void Application_Start(object sender, EventArgs e) 
    { 
     AutoMapperConfig.RegisterMappings(); 
    } 
    /* rest of Global.asax methods (Session_Start, Application_BeginRequest, etc.) with empty bodies */ 

RegisterMappings方法

public static class AutoMapperConfig 
{ 
    public static void RegisterMappings() 
    { 
     /* multiple calls to Mapper.CreateMap() */ 

     Mapper.AssertConfigurationIsValid(); 
    } 
} 

SVC文件標記

<%@ ServiceHost Language="C#" 
      Debug="true" 
      Service="MyApp.Services.MyAppService" 
      Factory="Ninject.Extensions.Wcf.NinjectServiceHostFactory" %> 

其他一切作品,我已經創建了一個測試客戶端(一個簡單的控制檯應用程序),並增加了服務的參考。服務方法被調用的很好,只是這些映射有點問題,因爲AutoMapper會一直拋出AutoMapperMappingException異常(「缺少類型映射配置或不支持的映射」),原因很明顯。 應用程序的應用程序池是DefaultAppPool。我應該創建一個單獨的?

我真的不明白這裏的問題。先謝謝你。

回答

4

嗯,這需要一些額外的搜索,但我找到了答案在這裏 - https://groups.google.com/forum/#!topic/ninject/wRy3ELSV4bU

的問題是,NinjectHttpApplication類本身實現Application_Startup方法,因此不可能實現它在自己的派生類(全球級) 。 要模擬這種行爲,需要重寫OnApplicationStarted Ninject的方法。 這是關於我的特定問題的外觀:

protected override void OnApplicationStarted() 
{ 
    AutoMapperConfig.RegisterMappings(); 
} 
相關問題