在Azure函数中初始化AutoMapper

Chr*_*eys 7 c# initialization azure automapper azure-functions

我正在尝试创建一个Azure函数,我在其中使用AutoMapper的一些代码.我是C#,Azure和AutoMapper的新手,我在找到初始化AutoMapper配置的正确方法时遇到了一些麻烦.

MapInitializer.cs:

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

然后在我的函数中,我尝试执行以下操作:

Function.cs:

public static class ProcessQueueForIntercom
    {

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

            // rest of the code
        }
    }
Run Code Online (Sandbox Code Playgroud)

现在问题是,我第一次使用此函数处理消息时,一切顺利,代码按预期运行.但是,从第二次开始,我收到一条错误,说我的配置已经初始化.但我真的不知道如何使用Azure函数正确地执行此操作,因为通常您会在App Startup中初始化它,但我不认为Azure Functions(CMIW)有这样的东西,并且我找不到有关如何做到这一点的更多信息.我正在考虑用try catch围绕Activate()调用,并且只记录配置已经加载的警告,但这看起来不是很干净......

Mik*_*kov 7

你只需要打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
    }
}
Run Code Online (Sandbox Code Playgroud)

或者只是自己创建一个静态构造函数MapInitializer.

另见这个答案.

  • 如何使用在函数“ProcessQueue”的静态构造函数 ProcessQueueForIntercom() 中初始化的映射器?如何从函数中获取“_mapper”实例? (2认同)