private void EnsureProvideFunctionPresent(CachedServiceConfiguration serviceRecord) { if (serviceRecord.ProvideFunction == null) { throw new DependencyResolutionException( $"Cannot provide service instance because provider function is null", serviceRecord.ProvideType, ServiceRegistry); } }
private object ProvideByInstance(CachedServiceConfiguration serviceRecord) { if (serviceRecord.Instance == null) { serviceRecord.Instance = serviceRecord.ProvideFunction.Invoke(this); } switch (serviceRecord.Lifetime) { case Lifetime.Transient: EnsureProvideFunctionPresent(serviceRecord); return(serviceRecord.ProvideFunction.Invoke(this)); case Lifetime.Singleton: return(serviceRecord.Instance); default: return(serviceRecord.Instance); } }
private object ProvideByType(CachedServiceConfiguration serviceRecord) { var dependencies = serviceRecord.ProvideType.GetConstructors().FirstOrDefault().GetParameters(); var dependencyInstances = new List <object>(); foreach (var dependency in dependencies) { dependencyInstances.Add(Resolve(dependency.ParameterType)); } var instance = Activator.CreateInstance(serviceRecord.ProvideType, dependencyInstances.ToArray()); if (serviceRecord.Lifetime == Lifetime.Singleton) { serviceRecord.Provisioning = Provisioning.ByInstance; serviceRecord.Instance = instance; } return(instance); }