Dependency Injection
ASP.NET Core
public class A { }
public class B { }
public class C { }
[MappingGenerator(typeof(A), typeof(B))]
[MappingGenerator(typeof(A), typeof(C), ImplementationType = ImplementationType.Explicit)]
public partial class Mapper
{
}
var services = new ServiceCollection();
// The ASP.NET Core DI container doesn't natively support registering an
// implementation as multiple services (sometimes called "forwarding").
// Instead, you have to manually delegate resolution of the service to a factory function.
services.AddSingleton<Mapper>();
// You need IAbstractMapper registration if you want to use AggregatedMapper (see section bellow).
services.AddSingleton<IAbstractMapper>(p => p.GetRequiredService<Mapper>());
// Register mapper.
services.AddSingleton<IMapper<A, B>>(p => p.GetRequiredService<Mapper>());
// Due to explicit IMapper implementation cast is needed.
services.AddSingleton<IMapper<A, C>>(p => (IMapper<A, C>)p.GetRequiredService<Mapper>());
var provider = services.BuildServiceProvider();
var mapper = provider.GetRequiredService<IMapper>();
var b = provider.GetRequiredService<IMapper<A, B>>().Map(new A());
var c = provider.GetRequiredService<IMapper<A, C>>().Map(new A());
AggregatedMapper
If you want to have all your mappings resolved in single placeyou can use built-in AggregatedMapper
var services = new ServiceCollection();
// ... Mappers registration ...
services.AddSingleton<IMapper, AggregatedMapper>();
var provider = services.BuildServiceProvider();
var mapper = provider.GetRequiredService<IMapper>();
var b = mapper.Map<A, B>(new A());
var c = mapper.Map<A, C>(new A());