using Microsoft.Extensions.DependencyInjection; using Raven.Client.Documents; using System; using zero.Core.Options; namespace zero.Core.Mapper { public static class MapperServiceCollectionExtensions { public static IServiceCollection AddMapper(this IServiceCollection services) where T : class, IMapper { return services.AddSingleton(); } public static IServiceCollection AddMapper(this IServiceCollection services, Action options) where T : class, IMapper, new() { return services.AddSingleton(factory => { T mapper = new T(); options(mapper); return mapper; }); } public static IServiceCollection AddMapper(this IServiceCollection services) => services.AddMapper(); public static IServiceCollection AddMapper(this IServiceCollection services, Action options) { return services.AddSingleton(factory => { DefaultMapper mapper = new DefaultMapper(factory.GetService(), factory.GetService()); options(mapper); return mapper; }); } } }