2015-08-23 4 views
1

У меня есть веб-сервис WCF, размещенный на моем локальном IIS (не Express). Я включил Global.asax в свой корневой каталог, где он должен быть. Поскольку я использую Ninject с расширениями WCF, класс Global расширяет NinjectHttpApplication вместо HttpApplication (как видно here). Кроме того, я использую библиотеку AutoMapper для того, чтобы обойти написанный расточный шаблон шаблона. Проблема возникает из-за того, что статический метод, который я определил для настройки AutoMapper, не вызывается, заставляя AutoMapper генерировать исключения при вызове Mapper.Map(). Этот вызов статического метода определен в методе Global_asax Application_Start(), поскольку я хочу, чтобы эти сопоставления выполнялись один раз за всю жизнь веб-службы. Метод CreateKernel() объекта Ninject называется «просто отлично», кстати. Я что-то упустил? Я попытался отладить его, он не попал в точку останова, хотя я подключил отладчик к w3wp.exe, а также попытался поместить явный вызов Debugger.Break() в его тело.Метод Application_Start Global.asax не вызван

Вот как это выглядит так далеко:

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, так что невозможно реализовать в своем собственном производном классе (Global класс) , Для моделирования такого поведения необходимо переопределить метод OnApplicationStarted Ninject. Вот как это выглядит в отношении моей конкретной проблемы:

protected override void OnApplicationStarted() 
{ 
    AutoMapperConfig.RegisterMappings(); 
} 
Смежные вопросы