简体   繁体   中英

Configuring AutoMapper in Multiple Projects

I currently have built an MVC solution which has a web project (controllers/views/scripts), services project (business layer, builds view models), and repositories project (data access layer).

I have used AutoMapper in my projects in the past and am trying to configure AutoMapper in this solution. Normally, I configure all of my maps in MapperConfig.cs which is called in Global.asax.cs .

My Problem is that the web project which is where I normally configure AutoMapper only has reference to the services project and the services project only has reference to the data project. So, when I go to configure my maps as I normally would, I am unable to define maps for the data project due to the web project not having a reference to the data project. I need a way to configure my data access layer maps without adding a reference for the data project to the web project.

The project dependency diagram would look like the following:

Web Proj --> Services Proj --> Data Proj

How can I overcome this?

There is no need to have a single mapping registration file across all projects, especially that you say that you don't have any cross-cutting types.

The simplest way would be to define a configuration file per project , and have those configurations call each other, repeating the layered dependencies of your assemblies , like below:

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

Alternatively, you could use the Assembly Scanning for auto configuration

As described by @Jimmy Bogard, when you run your web app, all assemblies of your application will eventually get loaded into your application domain - so you can get all the profiles from all the assemblies and add them to mapper config: How to Initialize AutoMapper Profiles in referenced project DLLs in ASP.Net webapp

Yet another alternative approach, that works for ASP.NET apps can be found here: Where to place AutoMapper map registration in referenced dll

The way I've handled this in some ASP.Net MVC projects, is by using AutoMapper Profiles .

You create separate mapping Profiles that handle creating the Mappings for objects in that Project/Assembly.

You then add the profiles to the overall configuration manually, or you can use Reflection/Assembly scanning to automatically load the profiles.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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