我正在尝试创建一个Azure函数,其中我使用了AutoMapper的一些代码。我对C#、Azure和AutoMapper相当陌生,我在找到初始化AutoMapper配置的正确方法时遇到了一些麻烦。
Map初始化程序.cs:
public static class MapInitializer
{
public static void Activate()
{
Mapper.Initialize(cfg =>
{
// initialize mappings here
});
}
}
然后在我的函数中,我尝试执行以下操作:
函数.cs:
public static class ProcessQueueForIntercom
{
[FunctionName("ProcessQueue")]
public static void Run([QueueTrigger("messages")]string myQueueItem, TraceWriter log)
{
MapInitializer.Activate();
// rest of the code
}
}
现在的问题是,我第一次用这个函数处理消息时,一切都很顺利,代码按我预期的运行。但是,从第二次开始,我得到一个错误,说我的配置已经初始化。但我真的不知道如何用Azure函数正确地完成这一点,因为通常你会在应用程序启动中初始化它。但我不认为Azure Functions(CMIW)有这样的功能,而且我也没有找到很多关于如何准确实现这一点的信息。我想用一个try catch来包围Activate()调用,并记录一个警告,说明配置已经加载,但这似乎不是很清楚。
2条答案
按热度按时间j91ykkif1#
你只需要调用
Activate
一次。你可以通过一个静态构造函数来实现:或者只在
MapInitializer
本身上创建一个静态构造函数。另请参阅this answer。
lf5gs5x22#
由于静态
Mapper.Initialize
API现在已经正式失效,我认为最好的解决方案是在函数类构造函数中注入一个Map器。然后,将自动Map器注入到函数类中,如下所示: