繁体   English   中英

在多个项目中配置AutoMapper

[英]Configuring AutoMapper in Multiple Projects

我目前已经构建了一个MVC解决方案,它包含一个Web项目(控制器/视图/脚本),服务项目(业务层,构建视图模型)和存储库项目(数据访问层)。

我过去在我的项目中使用过AutoMapper,并尝试在此解决方案中配置AutoMapper。 通常,我在MapperConfig.cs配置我在Global.asax.cs调用的所有映射。

我的问题是我通常配置AutoMapper的Web项目只引用了服务项目,而服务项目只引用了数据项目。 因此,当我像往常一样配置我的地图时,由于Web项目没有引用数据项目,我无法为数据项目定义地图。 我需要一种方法来配置我的数据访问层映射,而无需将数据项目的引用添加到Web项目。

项目依赖关系图如下所示:

Web Proj - > Services Proj - > Data Proj

我怎么能克服这个?

有没有必要有在所有项目中一个映射注册文件,尤其是你说你没有任何交叉类型。

最简单的方法是为每个项目定义一个配置文件,让这些配置相互调用,重复程序集的分层依赖关系 ,如下所示:

Global.asax.cs --> WebProjMapRegistrations.Register()-->ServicesMapRegistrations.Register()-->DataMapRegistrations.Register()

或者,您可以使用Assembly Scanning进行自动配置

如@Jimmy Bogard所述,当您运行Web应用程序时,应用程序的所有程序集最终都会加载到您的应用程序域中 - 因此您可以从所有程序集中获取所有配置文件并将它们添加到映射器配置: 如何初始化AutoMapper ASP.Net webapp中引用的项目DLL中的配置文件

另一种适用于ASP.NET应用程序的替代方法可以在这里找到: 在引用的dll中放置AutoMapper地图注册的位置

我在一些ASP.Net MVC项目中处理这个问题的方法是使用AutoMapper Profiles

您可以创建单独的映射配置文件,以处理为该项目/程序集中的对象创建映射。

然后,您可以手动将配置文件添加到整体配置中,也可以使用反射/装配扫描自动加载配置文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM