我目前已经构建了一个MVC解决方案,它包含一个Web项目(控制器/视图/脚本),服务项目(业务层,构建视图模型)和存储库项目(数据访问层)。
我过去在我的项目中使用过AutoMapper,并尝试在此解决方案中配置AutoMapper。通常,我会在MapperConfig.cs
中配置Global.asax.cs
中调用的所有地图。
我的问题是,我通常配置AutoMapper的Web项目只引用了服务项目,而服务项目只引用了数据项目。因此,当我像往常一样配置我的地图时,由于Web项目没有引用数据项目,我无法为数据项目定义地图。我需要一种方法来配置我的数据访问层映射,而无需将数据项目的引用添加到Web项目。
项目依赖关系图如下所示:
Web Proj - >服务项目 - > Data Proj
我怎样才能克服这个?
答案 0 :(得分:4)
不需要在所有项目中都有单个映射注册文件,尤其是您说没有任何横切类型。
最简单的方式是定义一个配置文件每个项目,让这些配置互相调用,重复程序集的分层依赖 em>,如下所示:
Global.asax.cs --> WebProjMapRegistrations.Register()-->ServicesMapRegistrations.Register()-->DataMapRegistrations.Register()
或者,您可以使用Assembly Scanning for auto configuration
如@Jimmy Bogard所述,当您运行Web应用程序时,应用程序的所有程序集最终会加载到您的应用程序域中 - 因此您可以从所有程序集中获取所有配置文件将它们添加到映射器配置:How to Initialize AutoMapper Profiles in referenced project DLLs in ASP.Net webapp
可以在此处找到适用于ASP.NET应用程序的另一种替代方法: Where to place AutoMapper map registration in referenced dll
答案 1 :(得分:1)
我在一些ASP.Net MVC项目中处理这个问题的方法是使用AutoMapper Profiles。
您可以创建单独的映射配置文件,用于处理为该项目/程序集中的对象创建映射。
然后,您可以手动将配置文件添加到整体配置中,也可以使用Reflection/Assembly scanning自动加载配置文件。