private void StoreInjectionSpecification(InjectionSpecification injectionSpecification)
 {
     if (IsConfigured(injectionSpecification.ConfigurationType))
     {
         _typeSpecifications[injectionSpecification.ConfigurationType] = injectionSpecification;
     }
     else
     {
         _typeSpecifications.Add(injectionSpecification.ConfigurationType, injectionSpecification);
     }
 }
Beispiel #2
0
        private void StoreResult(InjectionSpecification injectionSpecification, object result)
        {
            if (injectionSpecification.ConfigurationScope == ConfigurationScope.Singleton)
            {
                _singletons.Add(injectionSpecification.ConfigurationType, result);
            }

            if (injectionSpecification.ConfigurationScope == ConfigurationScope.Scoped)
            {
                _scopedObjects.Add(injectionSpecification.ConfigurationType, result);
            }
        }
        private InjectionSpecification GetNewInjectionSpecification <TConfiguration, TSpecification>(ConfigurationScope scope, ConfigurationStyle style)
        {
            var configurationType      = typeof(TConfiguration);
            var specificationType      = typeof(TSpecification);
            var injectionSpecification = new InjectionSpecification
            {
                ConfigurationType  = configurationType,
                SpecificationType  = specificationType,
                ConfigurationScope = scope,
                ConfigurationStyle = style,
            };

            return(injectionSpecification);
        }
Beispiel #4
0
        private object GetPremadeObject(InjectionSpecification injectionSpecification)
        {
            if (injectionSpecification.ConfigurationScope == ConfigurationScope.Singleton &&
                _singletons.ContainsKey(injectionSpecification.ConfigurationType))
            {
                return(_singletons[injectionSpecification.ConfigurationType]);
            }

            if (injectionSpecification.ConfigurationScope == ConfigurationScope.Scoped &&
                _scopedObjects.ContainsKey(injectionSpecification.ConfigurationType))
            {
                return(_scopedObjects[injectionSpecification.ConfigurationType]);
            }

            return(null);
        }
Beispiel #5
0
        private object Create(InjectionSpecification injectionSpecification)
        {
            object result = GetPremadeObject(injectionSpecification);

            if (result != null)
            {
                return(result);
            }

            switch (injectionSpecification.ConfigurationStyle)
            {
            case ConfigurationStyle.ConstructorFunction:
                return(injectionSpecification.ConstructorFunction());

            case ConfigurationStyle.SpecificationType:
                var      constructor    = injectionSpecification.Constructor;
                var      parameterInfos = constructor.GetParameters();
                object[] parameters     = null;

                if (parameterInfos.Length > 0)
                {
                    parameters = new object[parameterInfos.Length];
                    for (int i = 0; i < parameterInfos.Length; i++)
                    {
                        parameters[i] = CreateParameter(parameterInfos[i]);
                    }
                }

                result = constructor.Invoke(parameters);
                break;

            default:
                throw new ArgumentException("Invalid configuration");
            }

            StoreResult(injectionSpecification, result);
            return(result);
        }