2015-08-23 67 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(); 
} 
相关问题