wcf - 如何在 IIS 托管的 WCF 应用程序中配置 AutoMapper 9.0
问题描述
我想在 WCF 项目中使用 AutoMapper 9.0,该项目包含将在 IIS 中托管的多个服务。我只发现了另一个相关的 SO 问题,但它处理的是 10 年前的 AutoMapper 版本,并且没有问同样的问题。它的答案类似于建议使用 a 的 Google 上的热门歌曲,ServiceBehavior
但当我希望多个服务使用同一个映射器时,这似乎不适用。防守休息。
在 Web 项目中,您可能会在应用程序启动时创建一个静态MapperConfiguration
文件Global.asax
,但 WCF 没有Global.asax
. 看起来有几个选项可以在 WCF 中执行初始化代码:
AppInitialize()
在 App_Code 文件夹中包含一个方法。这将在运行时动态编译,人们抱怨它在 IIS 中可能缺少引用问题,所以我不确定AutoMapper
,否则一旦部署到 IIS 就会发现它的依赖关系。- 创建自定义
ServiceHost
. 这似乎会在应用程序启动时执行一次,但看起来它忽略了我不想要的 web.config 配置。 - 使用每个服务的
Configure
方法。这与 #2 具有相同的缺点,而且我开始关注线程安全(如ServiceBehavior
方法中一样),因为两个服务可能会尝试MapperConfiguration
一次初始化。
我考虑只创建一个具有静态属性的类,如果它尚未创建,它将创建一个静态MapperConfiguration
或IMapper
实例,但与 #3 一样,我担心这可能不是线程安全的。也许如果我做了这样的事情?
public static class MapperConfig
{
private static IMapper _modelMapper;
private static readonly object _mapperLocker = new object();
public static IMapper ModelMapper
{
get
{
lock(_mapperLocker)
{
if (_modelMapper == null)
{
var config = new MapperConfiguration(cfg => cfg.AddProfile(new MappingProfile1()));
_modelMapper = config.CreateMapper();
}
}
return _modelMapper;
}
}
}
两个服务可以ModelMapper
同时调用的地方。另一个缺点是对任何服务的第一个请求都必须等待映射编译,但我不确定我能摆脱这种情况。我绝对不希望它在每次调用时编译映射,甚至不希望每次服务都这样做。您能否就MapperConfiguration
IIS 托管的 WCF 中的线程安全以及使用它的最佳方式提出建议?
解决方案
推荐阅读
- tfs - 如何使用 VS Release Management(本地 TFS)设置文件复制到 FTP 服务器
- excel - VBA 错误 1004 - ChangeFileAccess 方法失败 - Sharepoint 上的文件
- c# - 更改富文本框之前的事件
- c - 厨师和娃娃 MISP
- linux - curl: (77) 自签名 CA 的 SSL CA 证书(路径?访问权限?)有问题
- php - 如何优化 PHP 代码上传 SQL 转储
- oracle - Oracle 会话活动最后 10 秒
- php - PHP文件上传,图片未发布
- python - 在anaconda中找不到sklearn模块
- angular2-forms - 为文件上传正式实施 Angular 2?