2013-07-02 1 views
0

Jquery ajax 포스트가 외부 Web Service 컨텐트를 가져 오는 WebMethod를 호출하고 변환하여 클라이언트로 리턴합니다.Application_Start에서 CreateMap을 수행 할 때 Automapper 예외가 발생했습니다.

내 수업 : ConfiguratorModel : List<OptionGroup>.

인사이드 Application_Start : Mapper.CreateMap<choiceList, OptionGroup>().

CreateMap 후에도 Mapper.AssertConfigurationIsValid()을 성공적으로 실행합니다.

내 변환기 클래스 내부 Mapper.Map<List<choiceList>, ConfiguratorModel>(choiceLists)을 실행 automapper가 실패하고 클라이언트에 JSON으로 다음과 같은 오류를 반환 :

{"Message":"TryingtomapSystem.Collections.Generic.List`1[[Constructor.OFML.Services.Basket.choiceList,Constructor.OFML,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null]]toConstructor.OFML.ConfiguratorModel.\nExceptionoftype\u0027AutoMapper.AutoMapperMappingException\u0027wasthrown.","StackTrace":"atAutoMapper.MappingEngine.AutoMapper.IMappingEngineRunner.Map(ResolutionContextcontext)\r\natAutoMapper.MappingEngine.Map(Objectsource,TypesourceType,TypedestinationType)\r\natAutoMapper.MappingEngine.Map[TSource,TDestination](TSourcesource)\r\natAutoMapper.Mapper.Map[TSource,TDestination](TSourcesource)\r\natConstructor.OFML.ConfiguratorConverter.ConvertToConfiguratorModel(List`1choiceLists)inc:\\EPiServer\\Sites\\bouvet_sbe\\Constructor\\trunk7\\libraries\\Constructor.FOML\\ConfiguratorConverter.cs:line58\r\natConstructor.OFML.ConfiguratorConverter.BuildConfiguratorModel(List`1choiceLists,articleDataarticleData)inc:\\EPiServer\\Sites\\bouvet_sbe\\Constructor\\trunk7\\libraries\\Constructor.FOML\\ConfiguratorConverter.cs:line68\r\natConstructor.OFML.ConfiguratorConverter.BuildConfiguratorResultModel(List`1choiceLists,articleDataarticleData,StringimageUrl)inc:\\EPiServer\\Sites\\bouvet_sbe\\Constructor\\trunk7\\libraries\\Constructor.FOML\\ConfiguratorConverter.cs:line90\r\natConstructor.OFML.OfmlService.GetConfigurationResult(StringsessionId,StringarticleId)inc:\\EPiServer\\Sites\\bouvet_sbe\\Constructor\\trunk7\\libraries\\Constructor.FOML\\OfmlService.cs:line89\r\natConstructor.Services.ConfiguratorService.GetInitialJson(StringsessionId,StringarticleId)inc:\\EPiServer\\Sites\\bouvet_sbe\\Constructor\\trunk7\\www\\Services\\ConfiguratorService.asmx.cs:line32","ExceptionType":"AutoMapper.AutoMapperMappingException"} 

내가 Mapper.CreateMap를 이동하면 Mapper.Map의 모든 매력처럼 작동하기 전에. 그러나 CreateMap은 스레드 세이프가 아니므로 매번 실행하는 것이 좋지 않은 해결 방법입니다. 내가 뭘해야하는지 알고있어? 내 IIS는 btw입니다. 완전 신뢰로 달리고있다.

+0

왜 'Application_Start'에서 스레드 안전성에 대해 걱정하고 있습니까? 한 번에 하나의 스레드 만 호출합니다. 즉, 이상한 IIS 설정이 진행되지 않는다면 말입니다. –

+0

"Mapper.CreateMap은 threadsafe가 아니며 앞으로도 존재하지 않습니다. 그러나 Mapper.Map은 스레드로부터 안전합니다 .Mapper 정적 클래스는 MappingEngine 및 Configuration 객체 위에있는 단순한 래퍼이므로 Mapper.CreateMap if 하나의 중앙 위치에서 설정을 스레드 세이프 방식으로 수행합니다. " Ref : http://stackoverflow.com/questions/10649250/is-mapper-map-in-automapper-thread-safe – Goran

+0

그 때문에 CreateMap을 한 번만 실행하고 싶습니다. – Goran

답변

0

CreateMap 위치는 정적 클래스에서 호출되는 한 문제가 아니어야합니다. 이 같은

뭔가 일을해야합니다 위해 Application_Start에서

public static class AutoMapperConfiguration 
{ 
    public static void Configure() 
    { 
     ConfigureSomeMapping(); 
    } 

    private static void ConfigureSomeMapping() 
    { 
     Mapper.CreateMap<...>(); 
    } 
    } 

AutoMapperConfiguration.Configure(); 

당신은 또한 청소기를 만들기 위해 AutoMapper 프로파일을 사용할 수 있습니다 호출합니다.