private void StoreInjectionSpecification(InjectionSpecification injectionSpecification) { if (IsConfigured(injectionSpecification.ConfigurationType)) { _typeSpecifications[injectionSpecification.ConfigurationType] = injectionSpecification; } else { _typeSpecifications.Add(injectionSpecification.ConfigurationType, injectionSpecification); } }
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); }
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); }
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); }