# automapper/automapper.extensions.enummapping architecture

> Architecture diagram of the GitHub repository automapper/automapper.extensions.enummapping, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-12). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/automapper/automapper.extensions.enummapping
- Repository: https://github.com/automapper/automapper.extensions.enummapping

## Overview

AutoMapper.Extensions.EnumMapping adds configurable enum-to-enum conversion to AutoMapper. A profile calls ConvertUsingEnumMapping, optionally selects name, underlying-value, or custom mappings, and may configure reverse mappings; conversion builds a runtime converter that resolves values or throws configured exceptions. The optional validation extension adds checks for unmapped source values during AutoMapper configuration validation. The README documents these capabilities; implementation relationships below are limited to sampled code and SOURCE INDEX references.

Main entry points: [`src/AutoMapper.Extensions.EnumMapping/Internal/EnumMappingFeature.cs`](https://github.com/automapper/automapper.extensions.enummapping/blob/master/src/AutoMapper.Extensions.EnumMapping/Internal/EnumMappingFeature.cs) (Mapping feature), [`src/AutoMapper.Extensions.EnumMapping/Internal/EnumMappingValidationRuntimeFeatureProxy.cs`](https://github.com/automapper/automapper.extensions.enummapping/blob/master/src/AutoMapper.Extensions.EnumMapping/Internal/EnumMappingValidationRuntimeFeatureProxy.cs) (Validation proxy), [`src/AutoMapper.Extensions.EnumMapping/Internal/GetDestinationObject.cs`](https://github.com/automapper/automapper.extensions.enummapping/blob/master/src/AutoMapper.Extensions.EnumMapping/Internal/GetDestinationObject.cs) (Destination result), [`src/AutoMapper.Extensions.EnumMapping/EnumMappingExpressionExtensions.cs`](https://github.com/automapper/automapper.extensions.enummapping/blob/master/src/AutoMapper.Extensions.EnumMapping/EnumMappingExpressionExtensions.cs) (Mapping extension)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["Configuration API"]
  node_convert_extension["Mapping extension"]
  node_mapping_expression["Mapping expression"]
  node_configuration_options["Enum options"]
  node_mapping_options_api["Reverse API"]
end

subgraph group_mapping["Mapping Runtime"]
  node_mapping_feature["Mapping feature"]
  node_expression_factory["Converter factory"]
  node_destination_result["Destination result"]
  node_destination_kind["Result kind"]
end

subgraph group_validation["Mapping Validation"]
  node_validation_extension["Validation extension"]
  node_validation_proxy["Validation proxy"]
  node_validation_feature["Mapping validator"]
  node_validation_interface["Validation contract"]
end

node_profile_author(("Profile author"))
node_automapper["AutoMapper"]

node_profile_author -->|"configures mapping"| node_convert_extension
node_convert_extension -->|"sets feature"| node_mapping_feature
node_convert_extension -->|"returns expression"| node_mapping_expression
node_mapping_expression -->|"implements API"| node_mapping_options_api
node_mapping_options_api -->|"accepts options"| node_configuration_options
node_profile_author -->|"selects mapping"| node_configuration_options
node_mapping_feature -->|"creates converter"| node_expression_factory
node_expression_factory -->|"resolves result"| node_destination_result
node_mapping_feature -->|"stores mappings"| node_destination_result
node_destination_result -->|"records kind"| node_destination_kind
node_profile_author -->|"enables validation"| node_validation_extension
node_validation_extension -->|"registers feature"| node_validation_proxy
node_mapping_feature -->|"attaches validator"| node_validation_proxy
node_validation_proxy -->|"implements contract"| node_validation_interface
node_validation_proxy -->|"delegates validation"| node_validation_feature
node_validation_feature -->|"checks mappings"| node_destination_result
node_mapping_feature -->|"registers converter"| node_automapper

click node_convert_extension "https://github.com/automapper/automapper.extensions.enummapping/blob/master/src/AutoMapper.Extensions.EnumMapping/EnumMappingExpressionExtensions.cs"
click node_mapping_expression "https://github.com/automapper/automapper.extensions.enummapping/blob/master/src/AutoMapper.Extensions.EnumMapping/Internal/EnumMappingExpression.cs"
click node_configuration_options "https://github.com/automapper/automapper.extensions.enummapping/blob/master/src/AutoMapper.Extensions.EnumMapping/IEnumConfigurationExpression.cs"
click node_mapping_options_api "https://github.com/automapper/automapper.extensions.enummapping/blob/master/src/AutoMapper.Extensions.EnumMapping/IEnumMappingExpression.cs"
click node_mapping_feature "https://github.com/automapper/automapper.extensions.enummapping/blob/master/src/AutoMapper.Extensions.EnumMapping/Internal/EnumMappingFeature.cs"
click node_expression_factory "https://github.com/automapper/automapper.extensions.enummapping/blob/master/src/AutoMapper.Extensions.EnumMapping/Internal/CustomMapExpressionFactory.cs"
click node_destination_result "https://github.com/automapper/automapper.extensions.enummapping/blob/master/src/AutoMapper.Extensions.EnumMapping/Internal/GetDestinationObject.cs"
click node_destination_kind "https://github.com/automapper/automapper.extensions.enummapping/blob/master/src/AutoMapper.Extensions.EnumMapping/Internal/GetDestinationType.cs"
click node_validation_extension "https://github.com/automapper/automapper.extensions.enummapping/blob/master/src/AutoMapper.Extensions.EnumMapping/EnumMapperConfigurationExpressionExtensions.cs"
click node_validation_proxy "https://github.com/automapper/automapper.extensions.enummapping/blob/master/src/AutoMapper.Extensions.EnumMapping/Internal/EnumMappingValidationRuntimeFeatureProxy.cs"
click node_validation_feature "https://github.com/automapper/automapper.extensions.enummapping/blob/master/src/AutoMapper.Extensions.EnumMapping/Internal/EnumMappingValidationRuntimeFeature.cs"
click node_validation_interface "https://github.com/automapper/automapper.extensions.enummapping/blob/master/src/AutoMapper.Extensions.EnumMapping/Internal/IEnumMappingValidationRuntimeFeature.cs"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_convert_extension,node_mapping_expression,node_configuration_options,node_mapping_options_api toneBlue
class node_mapping_feature,node_expression_factory,node_destination_result,node_destination_kind toneAmber
class node_validation_extension,node_validation_proxy,node_validation_feature,node_validation_interface toneMint
class node_profile_author,node_automapper toneIndigo
```

## Components

### Configuration API

- [Mapping extension](https://github.com/automapper/automapper.extensions.enummapping/blob/master/src/AutoMapper.Extensions.EnumMapping/EnumMappingExpressionExtensions.cs): `src/AutoMapper.Extensions.EnumMapping/EnumMappingExpressionExtensions.cs`
- [Mapping expression](https://github.com/automapper/automapper.extensions.enummapping/blob/master/src/AutoMapper.Extensions.EnumMapping/Internal/EnumMappingExpression.cs): `src/AutoMapper.Extensions.EnumMapping/Internal/EnumMappingExpression.cs`
- [Enum options](https://github.com/automapper/automapper.extensions.enummapping/blob/master/src/AutoMapper.Extensions.EnumMapping/IEnumConfigurationExpression.cs): `src/AutoMapper.Extensions.EnumMapping/IEnumConfigurationExpression.cs`
- [Reverse API](https://github.com/automapper/automapper.extensions.enummapping/blob/master/src/AutoMapper.Extensions.EnumMapping/IEnumMappingExpression.cs): `src/AutoMapper.Extensions.EnumMapping/IEnumMappingExpression.cs`

### Mapping Runtime

- [Mapping feature](https://github.com/automapper/automapper.extensions.enummapping/blob/master/src/AutoMapper.Extensions.EnumMapping/Internal/EnumMappingFeature.cs): `src/AutoMapper.Extensions.EnumMapping/Internal/EnumMappingFeature.cs`
- [Converter factory](https://github.com/automapper/automapper.extensions.enummapping/blob/master/src/AutoMapper.Extensions.EnumMapping/Internal/CustomMapExpressionFactory.cs): `src/AutoMapper.Extensions.EnumMapping/Internal/CustomMapExpressionFactory.cs`
- [Destination result](https://github.com/automapper/automapper.extensions.enummapping/blob/master/src/AutoMapper.Extensions.EnumMapping/Internal/GetDestinationObject.cs): `src/AutoMapper.Extensions.EnumMapping/Internal/GetDestinationObject.cs`
- [Result kind](https://github.com/automapper/automapper.extensions.enummapping/blob/master/src/AutoMapper.Extensions.EnumMapping/Internal/GetDestinationType.cs): `src/AutoMapper.Extensions.EnumMapping/Internal/GetDestinationType.cs`

### Mapping Validation

- [Validation extension](https://github.com/automapper/automapper.extensions.enummapping/blob/master/src/AutoMapper.Extensions.EnumMapping/EnumMapperConfigurationExpressionExtensions.cs): `src/AutoMapper.Extensions.EnumMapping/EnumMapperConfigurationExpressionExtensions.cs`
- [Validation proxy](https://github.com/automapper/automapper.extensions.enummapping/blob/master/src/AutoMapper.Extensions.EnumMapping/Internal/EnumMappingValidationRuntimeFeatureProxy.cs): `src/AutoMapper.Extensions.EnumMapping/Internal/EnumMappingValidationRuntimeFeatureProxy.cs`
- [Mapping validator](https://github.com/automapper/automapper.extensions.enummapping/blob/master/src/AutoMapper.Extensions.EnumMapping/Internal/EnumMappingValidationRuntimeFeature.cs): `src/AutoMapper.Extensions.EnumMapping/Internal/EnumMappingValidationRuntimeFeature.cs`
- [Validation contract](https://github.com/automapper/automapper.extensions.enummapping/blob/master/src/AutoMapper.Extensions.EnumMapping/Internal/IEnumMappingValidationRuntimeFeature.cs): `src/AutoMapper.Extensions.EnumMapping/Internal/IEnumMappingValidationRuntimeFeature.cs`

### Other components

- **Profile author**
- **AutoMapper**

## Connections

- Profile author → Mapping extension: configures mapping (evidence: `README.md`)
- Mapping extension → Mapping feature: sets feature (evidence: `src/AutoMapper.Extensions.EnumMapping/EnumMappingExpressionExtensions.cs`)
- Mapping extension → Mapping expression: returns expression (evidence: `src/AutoMapper.Extensions.EnumMapping/EnumMappingExpressionExtensions.cs`)
- Mapping expression → Reverse API: implements API (evidence: `src/AutoMapper.Extensions.EnumMapping/Internal/EnumMappingExpression.cs`)
- Reverse API → Enum options: accepts options (evidence: `src/AutoMapper.Extensions.EnumMapping/IEnumMappingExpression.cs`)
- Profile author → Enum options: selects mapping (evidence: `README.md`)
- Mapping feature → Converter factory: creates converter (evidence: `src/AutoMapper.Extensions.EnumMapping/Internal/EnumMappingFeature.cs`)
- Converter factory → Destination result: resolves result (evidence: `src/AutoMapper.Extensions.EnumMapping/Internal/CustomMapExpressionFactory.cs`)
- Mapping feature → Destination result: stores mappings (evidence: `src/AutoMapper.Extensions.EnumMapping/Internal/EnumMappingFeature.cs`)
- Destination result → Result kind: records kind (evidence: `src/AutoMapper.Extensions.EnumMapping/Internal/GetDestinationObject.cs`)
- Profile author → Validation extension: enables validation (evidence: `README.md`)
- Validation extension → Validation proxy: registers feature (evidence: `src/AutoMapper.Extensions.EnumMapping/EnumMapperConfigurationExpressionExtensions.cs`)
- Mapping feature → Validation proxy: attaches validator (evidence: `src/AutoMapper.Extensions.EnumMapping/Internal/EnumMappingFeature.cs`)
- Validation proxy → Validation contract: implements contract (evidence: `src/AutoMapper.Extensions.EnumMapping/Internal/EnumMappingValidationRuntimeFeatureProxy.cs`)
- Validation proxy → Mapping validator: delegates validation (evidence: `src/AutoMapper.Extensions.EnumMapping/Internal/EnumMappingValidationRuntimeFeatureProxy.cs`)
- Mapping validator → Destination result: checks mappings (evidence: `src/AutoMapper.Extensions.EnumMapping/Internal/EnumMappingValidationRuntimeFeature.cs`)
- Mapping feature → AutoMapper: registers converter (evidence: `src/AutoMapper.Extensions.EnumMapping/Internal/EnumMappingFeature.cs`)
