Using Localization in AutoMapper with .NET Core

magbeat
EcoLogic
Published in
1 min readMar 20, 2017

The author of AutoMapper Jimmy Bogard wrote a nice blog post on how he integrated AutoMapper in the new Dependency Injection framework of .NET Core.

To use localization in AutoMapper we had to basically change three lines of code in Startup.cs and install the AutoMapper.Extensions.Microsoft.DependencyInjection NuGet package.

var config = new MapperConfiguration(cfg => { cfg.AddProfile(new AutoMapperConfig()); });
services.AddSingleton(sp => config.CreateMapper());

Becomes:

services.AddMvc();
services.AddAutoMapper(typeof(Startup));

It is important to note that `services.AddAutoMapper()` has to be called after `services.AddMvc()`.

You don’t need to supply AutoMapper with your profiles anymore. AutoMapper will search the assemblies to initialize itself. All resolvers will be registered in the DI container of .NET Core by AutoMapper.

You can now use the localizer in your profile:

public class AutoMapperConfig : Profile
{
public AutoMapperConfig()
{
CreateMap<Model, ViewModel>()
.ForMember(dest => dest.Titel, opt => opt.ResolveUsing<TranslateResolver, string>(src => src.Titel));
}
public class TranslateResolver : IMemberValueResolver<object, object, string, string>
{
private readonly IStringLocalizer<TranslateResolver> _localizer;
public TranslateResolver(IStringLocalizer<TranslateResolver> localizer)
{
_localizer = localizer;
}

public string Resolve(object source, object destination, string sourceMember, string destMember,
ResolutionContext context)
{
return _localizer[sourceMember];
}
}
}

--

--

magbeat
EcoLogic

Co-Founder Novaloop & Software Engineer (.NET Core, Angular, Flutter, C#, Typescript, Dart)