在Azure函数中初始化AutoMapper

我正在尝试创建一个Azure函数,我在其中使用AutoMapper的一些代码。 我是C#,Azure和AutoMapper的新手,我在找到初始化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 } } 

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

您只需要调用一次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本身上创建一个静态构造函数。

另见这个答案 。