internal Mappings(string mappingFile, INDOContainer configContainer) : base(mappingFile) { this.configContainer = configContainer; InitClassFields(); this.updateOrder = new ClassRank().BuildUpdateRank(Classes); }
/// <summary> /// Creates an object and resolves the parameters /// </summary> /// <param name="resolvingContainer"></param> /// <param name="overrides"></param> /// <returns></returns> protected virtual object CreateObject(INDOContainer resolvingContainer, ParameterOverride[] overrides) { List <object> parameters = new List <object>(); var registrations = resolvingContainer.Registrations; ConstructorInfo constructor = null; foreach (var constr in tTo.GetConstructors().OrderBy(ci => ci.GetParameters().Length)) { bool canResolve = true; parameters.Clear(); foreach (var p in constr.GetParameters()) { if (p.ParameterType != typeof(INDOContainer) && !overrides.Any(ov => ov.Name == null && p.ParameterType.IsAssignableFrom(ov.Value.GetType()) || ov.Name == p.Name) && !registrations.Any(r => r.Key == p.ParameterType)) { canResolve = false; break; } } if (canResolve) { constructor = constr; //isDefaultConstructor = constr.GetParameters().Length == 0; break; } } if (constructor == null) { throw new NDOException(116, $"Cant find a resolvable constructor for class '{tFrom.FullName}'"); } foreach (var p in constructor.GetParameters()) { if (p.ParameterType == typeof(INDOContainer)) { parameters.Add(resolvingContainer); continue; } var overrde = overrides.FirstOrDefault(ov => ov.Name == null && p.ParameterType.IsAssignableFrom(ov.Value.GetType()) || ov.Name == p.Name); if (overrde != null) { parameters.Add(overrde.Value); } else { parameters.Add(resolvingContainer.Resolve(p.ParameterType)); } } return(constructor.Invoke(parameters.ToArray())); }
///<inheritdoc/> public object Resolve(INDOContainer resolvingContainer, string name, ParameterOverride[] overrides) { if (values.TryGetValue(name ?? string.Empty, out object result)) { return(result); } return(null); }
/// <inheritdoc/> public override object Resolve(INDOContainer resolvingContainer, string name, ParameterOverride[] overrides) { var key = name ?? string.Empty; var result = this.values.GetOrAdd(key, _ => { return(CreateObject(resolvingContainer, overrides)); }); return(result); }
// <summary> // Determines, if the underlying type has a default constructor. // </summary> //protected bool IsDefaultConstructor => isDefaultConstructor; /// <inheritdoc/> public virtual IPersistenceCapable CreateObject(INDOContainer configContainer) { if (isDefaultConstructor) { return(CreateObject()); } List <object> parameters = new List <object>(); if (this.constructor == null) { var registrations = configContainer.Registrations; foreach (var constr in t.GetConstructors().OrderBy(c => c.GetParameters().Length)) { bool canResolve = true; parameters.Clear(); foreach (var p in constr.GetParameters()) { if (!registrations.Any(r => r.Key == p.ParameterType)) { canResolve = false; break; } } if (canResolve) { this.constructor = constr; isDefaultConstructor = constr.GetParameters().Length == 0; break; } } } if (constructor == null) { throw new NDOException(116, $"Cant find a resolvable constructor for class '{t.FullName}'"); } foreach (var p in this.constructor.GetParameters()) { var o = configContainer.Resolve(p.ParameterType); parameters.Add(o); } return((IPersistenceCapable)this.constructor.Invoke(parameters.ToArray())); }
///<inheritdoc/> object InternalResolve(INDOContainer resolvingContainer, Type tFrom, string name, ParameterOverride[] overrides) { lock (lockObject) { var resolver = GetResolver(tFrom); if (resolver == null) { if (!tFrom.IsInterface && !tFrom.IsAbstract) { RegisterType(tFrom, tFrom, null); resolver = GetResolver(tFrom); } else { return(null); } } return(resolver.Resolve(resolvingContainer, name, overrides)); } }
/// <inheritdoc/> public virtual object Resolve(INDOContainer resolvingContainer, string name, ParameterOverride[] overrides) { return(CreateObject(resolvingContainer, overrides)); }
/// <summary> /// /// </summary> /// <param name="configContainer"></param> /// <param name="persistenceHandlerPool"></param> public NDOPersistenceHandlerManager(INDOContainer configContainer, IPersistenceHandlerPool persistenceHandlerPool) { this.configContainer = configContainer; this.persistenceHandlerPool = persistenceHandlerPool; }
void RemoveChildContainer(INDOContainer child) { this.children.Remove(child); }
/// <summary> /// Constructs a SqlPersistenceHandler object /// </summary> /// <param name="configContainer"></param> public SqlPersistenceHandler(INDOContainer configContainer) { this.configContainer = configContainer; }
public SqlQueryGenerator(INDOContainer configContainer) { this.configContainer = configContainer; this.mappings = this.configContainer.Resolve <Mappings>(); }