【发布时间】:2017-10-20 16:28:25
【问题描述】:
我正在使用 automapper 将我的 DTO 映射到 Viewmodel,我的一些 ViewModel 依赖于服务。
我找到了几种使用这些依赖项构造目标对象的方法,但我想知道是否可以只使用全局对象解析器(在我的例子中是 UnityContainer)?
我目前的解决方案是这样的:
config.CreateMap<SurveyDTO, SurveyViewModel>()
.ConstructUsing(x => _ObjectResovler.Resolve<SurveyViewModel>())
或者
config.CreateMap<SurveyDTO, SurveyViewModel>()
.ConstructUsingServiceLocator()
但这意味着我必须在每个映射中包含这样的一行。 有没有办法只对所有映射使用解析器而不在配置中指定它?
【问题讨论】:
-
危险将罗宾逊检测到 IOC 使用不当,危险危险。所有在开玩笑,您的视图模型都不应该有服务依赖,如果他们确实使用了服务定位器,那将是对 IOC 的错误使用。花点时间阅读更多关于如何设置 MVC 应用程序以及如何使用 IOC 来管理它们的信息。
-
@P.Roe 谢谢你的快速回答:),你有一个小例子或类似的东西吗?我不明白如何在不注入服务的情况下将视图模型的“保存”请求中继到服务。目前我将 SaveCommand 绑定到保存按钮。然后我被困在视图模型中。我在 xamarin CRM 示例 (github.com/xamarin/app-crm/blob/master/src/MobileApp/XamarinCRM/…) 中找到了这种结构。我发现了一些其他关于此的 SO 问题,但其中大多数最终都是使用服务层的视图模型。
-
啊,我看到您使用的是 MVVM 而不是我假设的 MVC。这极大地改变了事情。 msdn.microsoft.com/en-us/magazine/jj991965.aspx
-
很棒的文章,根据图 3 和图 10,我会说我的做法是正确的。但这让我回到了最初的问题,我真的需要告诉 automapper 允许对每个映射使用服务定位器(/手动创建目标对象)。这不是很多工作,但它是另一行可能会被遗忘:)
标签: c# automapper