// ReSharper disable once InconsistentNaming public static IFluentRestBuilder AddHAL( this IFluentRestBuilder builder) { RegisterMappings(builder); builder.Services.TryAddScoped( typeof(ICollectionMappingPipeFactory <,>), typeof(CollectionMappingPipeFactory <,>)); builder.Services .TryAddScoped <IRestCollectionLinkGenerator, RestCollectionLinkGenerator>(); return(builder); }
public static IFluentRestBuilder AddEntityFrameworkCorePipes <TContext>( this IFluentRestBuilder builder) where TContext : DbContext { RegisterEntityFrameworkRelatedServices <TContext>(builder.Services); RegisterPipes(builder.Services); RegisterTransformations(builder.Services); return(builder); }
public static IFluentRestBuilder RegisterUrlHelper(this IFluentRestBuilder builder) { if (builder.Services.Any(d => d.ServiceType == typeof(IUrlHelper))) { return(builder); } builder.Services.TryAddSingleton <IActionContextAccessor, ActionContextAccessor>(); builder.Services.TryAddScoped(serviceProvider => { var actionContextAccessor = serviceProvider.GetService <IActionContextAccessor>(); var urlHelperFactory = serviceProvider.GetService <IUrlHelperFactory>(); return(urlHelperFactory.GetUrlHelper(actionContextAccessor.ActionContext)); }); return(builder); }
public static IFluentRestBuilder AddRestMapper <TInput, TOutput>( this IFluentRestBuilder builder, Func <TInput, TOutput> mapping, Action <RestMapper <TInput, TOutput> > configuration = null) where TOutput : RestEntity { builder.Services.AddScoped <IMapper <TInput, TOutput> >( serviceProvider => { var urlHelper = serviceProvider.GetService <IScopedStorage <IUrlHelper> >()?.Value ?? serviceProvider.GetService <IUrlHelper>(); var mapper = new RestMapper <TInput, TOutput>(mapping, urlHelper); configuration?.Invoke(mapper); return(mapper); }); return(builder); }
private static void RegisterMappings(IFluentRestBuilder builder) { builder.Services.TryAddScoped <IMapperFactory, MapperFactory>(); builder.Services.TryAddScoped(typeof(IMapperFactory <>), typeof(MapperFactory <>)); builder.Services.TryAddTransient(typeof(IMappingBuilder <>), typeof(MappingBuilder <>)); }