private ContainerControlledCollection <TService> CreateInternal <TService>( IEnumerable <Type> serviceTypes) where TService : class { Requires.IsNotAnAmbiguousType(typeof(TService), nameof(TService)); Requires.IsNotNull(serviceTypes, nameof(serviceTypes)); // Make a copy for correctness and performance. serviceTypes = serviceTypes.ToArray(); Requires.DoesNotContainNullValues(serviceTypes, nameof(serviceTypes)); Requires.ServiceIsAssignableFromImplementations(typeof(TService), serviceTypes, nameof(serviceTypes), typeCanBeServiceType: true); Requires.DoesNotContainOpenGenericTypesWhenServiceTypeIsNotGeneric(typeof(TService), serviceTypes, nameof(serviceTypes)); Requires.OpenGenericTypesDoNotContainUnresolvableTypeArguments(typeof(TService), serviceTypes, nameof(serviceTypes)); var collection = new ContainerControlledCollection <TService>(this.container); collection.AppendAll(serviceTypes); this.RegisterForVerification(collection); return(collection); }
internal static InstanceProducer CreateControlledCollectionProducer <TService>( ContainerControlledCollection <TService> collection, Container container) { Registration registration = CreateControlledCollectionRegistration(collection, container); return(new InstanceProducer(typeof(IEnumerable <TService>), registration)); }
private void RegisterForVerification <TService>(ContainerControlledCollection <TService> collection) { // By creating a Producer, Simple Injector will automatically register it as 'external producer', // which allows it to be verified. To prevent memory leaks however, this external producer is // linked using a WeakReference to allow it to be GCed. To prevent this from happening, while // the application keeps referencing the collection, we let the collection reference the producer. collection.ParentProducer = SingletonLifestyle.CreateControlledCollectionProducer(collection, this.container); }
internal static Registration CreateControlledCollectionRegistration <TService>( ContainerControlledCollection <TService> collection, Container container) { var registration = CreateSingleInstanceRegistration(typeof(IEnumerable <TService>), collection, container); registration.IsCollection = true; return(registration); }
private ContainerControlledCollection <TService> CreateInternal <TService>( IEnumerable <Registration> registrations) where TService : class { Requires.IsNotAnAmbiguousType(typeof(TService), nameof(TService)); Requires.IsNotNull(registrations, nameof(registrations)); Requires.DoesNotContainNullValues(registrations, nameof(registrations)); Requires.AreRegistrationsForThisContainer(this.container, registrations, nameof(registrations)); Requires.ServiceIsAssignableFromImplementations(typeof(TService), registrations, nameof(registrations), typeCanBeServiceType: true); Requires.OpenGenericTypesDoNotContainUnresolvableTypeArguments(typeof(TService), registrations, nameof(registrations)); var collection = new ContainerControlledCollection <TService>(this.container); collection.AppendAll(registrations); this.RegisterForVerification(collection); return(collection); }