You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

LuConvertersExtensions.cs 2.2KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. using System.Collections.Generic;
  2. using System.Collections.ObjectModel;
  3. using System.Linq;
  4. using Luticate2.Auth.Utils.Business.ObjectConverter;
  5. using Luticate2.Auth.Utils.Business.ObjectConverterDescriptor;
  6. using Luticate2.Auth.Utils.Interfaces;
  7. using Microsoft.Extensions.DependencyInjection;
  8. using Microsoft.Extensions.DependencyInjection.Extensions;
  9. namespace Luticate2.Auth.Utils.Business.Converters
  10. {
  11. public static class LuConvertersExtensions
  12. {
  13. public static void AddLuObjectConverterDescriptors(this IServiceCollection services)
  14. {
  15. var typeILuObjectConverterDescriptor = typeof(ILuObjectConverterDescriptor<,>);
  16. var typeILuObjectConverterDescriptorEnumerable =
  17. typeILuObjectConverterDescriptor.MakeGenericType(typeof(Enumerable), typeof(Enumerable));
  18. services.AddSingleton<ILuObjectConverterDescriptorIdentity, LuObjectConverterDescriptorIdentity>();
  19. services.AddSingleton(typeILuObjectConverterDescriptorEnumerable, typeof(LuObjectConverterDescriptorEnumerable));
  20. }
  21. public static void AddLuObjectConverters(this IServiceCollection services)
  22. {
  23. var typeILuObjectConverter = typeof(ILuObjectConverter<,>);
  24. var listTypes = new []
  25. {
  26. typeof(IEnumerable<>),
  27. typeof(ICollection<>),
  28. typeof(Collection<>),
  29. typeof(IList<>),
  30. typeof(List<>)
  31. };
  32. services.TryAddSingleton<ILuConvertersAllocator, LuConvertersAllocator>();
  33. services.AddSingleton<ILuObjectConverterIdentity, LuObjectConverterIdentity>();
  34. foreach (var typeFrom in listTypes)
  35. {
  36. foreach (var typeTo in listTypes)
  37. {
  38. services.AddSingleton(typeILuObjectConverter.MakeGenericType(typeFrom, typeTo), typeof(LuObjectConverterLists));
  39. }
  40. }
  41. }
  42. public static void AddLuObjectConverterPoco<TTypeFrom, TTypeTo>(this IServiceCollection services)
  43. {
  44. services.AddSingleton<ILuObjectConverter<TTypeFrom, TTypeTo>, LuObjectConverterPoco<TTypeFrom, TTypeTo>>();
  45. }
  46. }
  47. }