Advertisement
Guest User

ZenjectToMsDiWorking

a guest
Jan 30th, 2020
170
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.06 KB | None | 0 0
  1.         private void RegisterFromServiceCollection_Old(IServiceCollection services)
  2.         {
  3.             var serviceProvider = services.BuildServiceProvider();
  4.  
  5.             var servicesToRegister = new Dictionary<Type, (HashSet<Type> contractTypes, ServiceLifetime lifetime)>();
  6.  
  7.             var delegateType = typeof(Delegate);
  8.             foreach (var service in services)
  9.             {
  10.                 if (delegateType.IsAssignableFrom(service.ServiceType))
  11.                 {
  12.                     Debug.Log($"Skipping type registration, because of delegate registration: {service.ServiceType}. Register this type manually");
  13.  
  14.                     continue;
  15.                 }
  16.  
  17.                 Type actualImplementationType;
  18.                 if (!(service.ImplementationType is null))
  19.                 {
  20.                     actualImplementationType = service.ImplementationType;
  21.                 }
  22.                 else if (!(service.ImplementationFactory is null))
  23.                 {
  24.                     actualImplementationType = serviceProvider.GetService(service.ServiceType).GetType();
  25.                 }
  26.                 else
  27.                 {
  28.                     actualImplementationType = service.ServiceType;
  29.                 }
  30.  
  31.                 if (servicesToRegister.TryGetValue(actualImplementationType, out var registeredContracts))
  32.                 {
  33.                     if (registeredContracts.lifetime != service.Lifetime)
  34.                     {
  35.                         throw new NotSupportedException(
  36.                             "Mismatching lifetimes for a type implementing multiple interfaces is not supported. "
  37.                             + $"Service type: {service.ServiceType}. "
  38.                             + $"First registered lifetime: {registeredContracts.lifetime}. "
  39.                             + $"Lifetime when trying to register: {service.Lifetime}");
  40.                     }
  41.  
  42.                     registeredContracts.contractTypes.Add(service.ServiceType);
  43.                 }
  44.                 else
  45.                 {
  46.                     servicesToRegister.Add(actualImplementationType, (new HashSet<Type> { service.ServiceType }, service.Lifetime));
  47.                 }
  48.             }
  49.  
  50.             foreach (var serviceWithContracts in servicesToRegister)
  51.             {
  52.                 var binding = Container.Bind(serviceWithContracts.Value.contractTypes).To(serviceWithContracts.Key);
  53.  
  54.                 switch (serviceWithContracts.Value.lifetime)
  55.                 {
  56.                     case ServiceLifetime.Singleton:
  57.                         binding.AsSingle();
  58.                         break;
  59.                     case ServiceLifetime.Scoped:
  60.                         binding.AsCached();
  61.                         break;
  62.                     case ServiceLifetime.Transient:
  63.                         binding.AsTransient();
  64.                         break;
  65.                     default:
  66.                         throw new ArgumentOutOfRangeException($"Unknown service lifetime{serviceWithContracts.Value.lifetime}");
  67.                 }
  68.             }
  69.         }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement