Esempio n. 1
0
 internal void AppendToCollectionInternal(Type itemType, Type implementationType)
 {
     // NOTE: The supplied serviceTypes can be opened, partially-closed, closed, non-generic or even
     // abstract.
     this.RegisterCollectionInternal(itemType,
                                     new[] { ContainerControlledItem.CreateFromType(implementationType) },
                                     appending: true);
 }
Esempio n. 2
0
 internal static ContainerControlledItem[] GetClosedGenericImplementationsFor(
     Type closedGenericServiceType, IEnumerable <ContainerControlledItem> containerControlledItems)
 {
     return((
                from item in containerControlledItems
                let openGenericImplementation = item.ImplementationType
                                                let builder = new GenericTypeBuilder(closedGenericServiceType, openGenericImplementation)
                                                              let result = builder.BuildClosedGenericImplementation()
                                                                           where result.ClosedServiceTypeSatisfiesAllTypeConstraints
                                                                           select item.Registration != null ? item : ContainerControlledItem.CreateFromType(result.ClosedGenericImplementation))
            .ToArray());
 }
Esempio n. 3
0
 internal static ContainerControlledItem[] GetClosedGenericImplementationsFor(
     Type closedGenericServiceType, IEnumerable <ContainerControlledItem> containerControlledItems,
     bool includeVariantTypes = true)
 {
     return((
                from item in containerControlledItems
                let openGenericImplementation = item.ImplementationType
                                                let builder = new GenericTypeBuilder(closedGenericServiceType, openGenericImplementation)
                                                              let result = builder.BuildClosedGenericImplementation()
                                                                           where result.ClosedServiceTypeSatisfiesAllTypeConstraints || (
                    includeVariantTypes && closedGenericServiceType.IsAssignableFrom(openGenericImplementation))
                                                                           let closedImplementation = result.ClosedServiceTypeSatisfiesAllTypeConstraints
             ? result.ClosedGenericImplementation
             : openGenericImplementation
                                                                                                      select item.Registration != null ? item : ContainerControlledItem.CreateFromType(closedImplementation))
            .ToArray());
 }
Esempio n. 4
0
 // This method is internal to prevent the main API of the framework from being 'polluted'. The
 // SimpleInjector.Advanced.AdvancedExtensions.AppendToCollection extension method enabled public
 // exposure.
 internal void AppendToCollectionInternal(Type itemType, Registration registration)
 {
     this.RegisterCollectionInternal(itemType,
                                     new[] { ContainerControlledItem.CreateFromRegistration(registration) },
                                     appending: true);
 }