2017-11-29 18 views
1

AutoMapper에서 일부 코드를 사용하는 Azure 함수를 만들려고합니다. 나는 C#, Azure 및 AutoMapper에 대해 상당히 익숙하며, 필자의 AutoMapper 구성을 초기화하는 정확한 방법을 찾는 데 어려움을 겪고 있습니다.Azure 함수에서 AutoMapper 초기화

MapInitializer.cs는 :

Function.cs : 내 기능에서 다음

public static class MapInitializer 
    { 
     public static void Activate() 
     { 
      Mapper.Initialize(cfg => 
      { 
       // initialize mappings here 
      }); 
     } 
    } 

, 나는 다음을 수행하려고 지금

public static class ProcessQueueForIntercom 
    { 

     [FunctionName("ProcessQueue")] 
     public static void Run([QueueTrigger("messages")]string myQueueItem, TraceWriter log) 
     { 
      MapInitializer.Activate(); 

      // rest of the code 
     } 
    } 

문제 처음으로이 함수를 사용하여 메시지를 처리하면 모든 것이 원활하게 진행되고 코드가 예상했다. 그러나 두 번째 설정에서 구성이 이미 초기화되었다는 오류가 발생합니다. 하지만 Azure 함수를 사용하여 올바르게 수행하는 방법에 대해서는 알지 못합니다. 일반적으로 App Startup에서이 함수를 초기화 할 것이기 때문에 Azure 함수 (CMIW)에 대해서는 그렇게 생각하지 않습니다. 나는 정확하게 어떻게하는지에 대한 많은 정보를 찾지 못하고있다. try catch와 함께 Activate() 호출을 둘러보고 구성이 이미로드되었다는 경고를 로깅하지만 매우 깨끗해 보이지는 않을 것입니다 ...

답변

2

Activate으로 한 번 전화하면됩니다.

public static class ProcessQueueForIntercom 
{ 
    static ProcessQueueForIntercom() 
    { 
     MapInitializer.Activate(); 
    } 

    [FunctionName("ProcessQueue")] 
    public static void Run([QueueTrigger("messages")]string myQueueItem, TraceWriter log) 
    {    
     // rest of the code 
    } 
} 

을하거나 MapInitializer 자체에 정적 생성자를 만들 : 당신은 정적 생성자에서 그것을 할 수 있습니다.

도 참조하십시오. this answer.

+0

위대한 작품입니다. 감사합니다! 나는 전에 정적 생성자를 보지 않았고/사용하지 않았다! –

+0

@Mikhail 정적 생성자를 소개해 주셔서 감사합니다 :) –