2017-11-29 2 views
1

AutoMapperでいくつかのコードを使用しているAzure関数を作成しようとしています。私はC#、Azure、AutoMapperの新機能を搭載しており、AutoMapperの設定を初期化する正しい方法を見つけるのが面倒です。Azure関数でAutoMapperを初期化する

MapInitializer.cs:

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

その後、私の関数の中で、私は次の操作を実行しようとしています:

Function.cs:今

public static class ProcessQueueForIntercom 
    { 

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

      // rest of the code 
     } 
    } 

問題私が最初にこの関数を使ってメッセージを処理したとき、すべてがスムーズに進み、コードは私として実行されました期待される。ただし、2回目以降、設定が既に初期化されているというエラーが表示されます。しかし、私はAzure関数でこれを正しく行う方法について実際には考えていません。通常はApp Startupでこれを初期化しますが、Azure関数(CMIW)にはこのようなことはないと思います。私は正確にこれを行う方法に関する多くの情報を見つけることはありません。私はちょうどtryキャッチで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静的なコンストラクタに私を紹介してくれてありがとう:) –

関連する問題