Global.asax的Application_Start方法没有被调用
我有一个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。我应该创建一个单独的?
我真的不明白这里的问题。先谢谢你。
嗯,这需要一些额外的搜索,但我找到了答案在这里 - https://groups.google.com/forum/#!topic/ninject/wRy3ELSV4bU
的问题是,NinjectHttpApplication类本身实现Application_Startup方法,因此不可能实现它在自己的派生类(全球级) 。 要模拟这种行为,需要重写OnApplicationStarted Ninject的方法。 这是关于我的特定问题的外观:
protected override void OnApplicationStarted()
{
AutoMapperConfig.RegisterMappings();
}