public override void PreBuildUp(IBuilderContext context) { var key = context.OriginalBuildKey; if (!(key.Type.IsInterface && _typeStacks.ContainsKey(key.Type)) || context.GetOverriddenResolver(key.Type) != null) { return; } var stack = _typeStacks[key.Type]; object value = null; while (stack.Count != 0) { var t = stack.Dequeue(); value = context.NewBuildUp(t, key.Name); var overrides = new DependencyOverride( key.Type, value); context.AddResolverOverrides(overrides); } context.Existing = value; context.BuildComplete = true; }
public override void PreBuildUp(IBuilderContext context) { NamedTypeBuildKey key = context.OriginalBuildKey; if (!(key.Type.IsInterface && _typeStacks.ContainsKey(key.Type))) { return; } if (null != context.GetOverriddenResolver(key.Type)) { return; } var stack = new Stack<Type>(_typeStacks[key.Type]); object value = null; stack.ForEach(type => { value = context.NewBuildUp(new NamedTypeBuildKey(type, key.Name)); var overrides = new DependencyOverride(key.Type, value); context.AddResolverOverrides(overrides); } ); context.Existing = value; context.BuildComplete = true; }
public override void PreBuildUp(IBuilderContext context) { NamedTypeBuildKey key = context.OriginalBuildKey; if (!(key.Type.IsInterface && _typeStacks.ContainsKey(key.Type))) { return; } if (null != context.GetOverriddenResolver(key.Type)) { return; } var stack = new Stack <Type>(_typeStacks[key.Type]); object value = null; stack.ForEach(type => { value = context.NewBuildUp(new NamedTypeBuildKey(type, key.Name)); var overrides = new DependencyOverride(key.Type, value); context.AddResolverOverrides(overrides); } ); context.Existing = value; context.BuildComplete = true; }
public override void PreBuildUp(IBuilderContext context) { var key = context.OriginalBuildKey; if (!key.Type.IsInterface || context.GetOverriddenResolver(key.Type) != null) { return; } Stack <Type> stack; if (!_stackDictionary.TryGetValue(key.Type, out stack)) { return; } object value = null; foreach (var t in stack) { value = context.NewBuildUp(new NamedTypeBuildKey(t, key.Name)); var overrides = new DependencyOverride(key.Type, value); context.AddResolverOverrides(overrides); } context.Existing = value; context.BuildComplete = true; }
/// <summary> /// Helper method used by generated IL to look up a dependency resolver based on the given key. /// </summary> /// <param name="context">Current build context.</param> /// <param name="dependencyType">Type of the dependency being resolved.</param> /// <param name="resolver">The configured resolver.</param> /// <returns>The found dependency resolver.</returns> public static IDependencyResolverPolicy GetResolver(IBuilderContext context, Type dependencyType, IDependencyResolverPolicy resolver) { Guard.ArgumentNotNull(context, "context"); var overridden = context.GetOverriddenResolver(dependencyType); return overridden ?? resolver; }
public static IEnumerable <object> ResolveConstructorScopedArguments(this IBuilderContext context) { var constructor = context.SelectConstructor(); if (constructor == null) { throw new InvalidOperationException("Call after TypeMapping Stage."); } var operation = context.CurrentOperation; foreach (var p in constructor.Constructor.FindScopedParameters()) { context.CurrentOperation = new MethodArgumentResolveOperation(p.ParameterType, null, p.Name); yield return(context.GetOverriddenResolver(context.BuildKey.Type).Resolve(context)); } context.CurrentOperation = operation; }
private static object ResolveArgument(BuildOperation operation, IBuilderContext context) { try { context.CurrentOperation = operation; var policy = context.GetOverriddenResolver(typeof(ParameterOverride)); return(null != policy?policy.Resolve(context) : context.Container.Resolve(operation.TypeBeingConstructed)); } catch (Exception e) { throw new ResolutionFailedException(operation.TypeBeingConstructed, (operation as ParameterResolveOperation)?.ParameterName, e, context, Constants.FactoryResolutionFailed); } finally { context.CurrentOperation = null; } }
private static object ResolveArgument(BuildOperation operation, IBuilderContext context, IUnityContainer container) { try { context.CurrentOperation = operation; var policy = context.GetOverriddenResolver(typeof(ParameterOverride)); return(null != policy ? policy.Resolve(context) : container.Resolve(operation.TypeBeingConstructed)); } catch { // ignored } finally { context.CurrentOperation = null; } return(GetDefaultValue(operation.TypeBeingConstructed)); }
public static IDependencyResolverPolicy GetResolver(IBuilderContext context, Type dependencyType, string resolverKey) { Guard.ArgumentNotNull(context, "context"); var resolver = context.GetOverriddenResolver(dependencyType); return resolver ?? context.Policies.Get<IDependencyResolverPolicy>(resolverKey); }
/// <summary> /// Helper method used by generated IL to look up a dependency resolver based on the given key. /// </summary> /// <param name="context">Current build context.</param> /// <param name="dependencyType">Type of the dependency being resolved.</param> /// <param name="resolverKey">Key the resolver was stored under.</param> /// <returns>The found dependency resolver.</returns> public static IDependencyResolverPolicy GetResolver(IBuilderContext context, Type dependencyType, string resolverKey) { var resolver = context.GetOverriddenResolver(dependencyType); return(resolver ?? context.Policies.Get <IDependencyResolverPolicy>(resolverKey)); }