public static Resolver <T> GetResolver <T>([NotNull] this Container container, Tag tag)
        {
            var key    = new Key(typeof(T), tag);
            var bucket = container.Resolvers.Buckets[key.GetHashCode() & container.Resolvers.Divisor].KeyValues;

            for (var index = 0; index < bucket.Length; index++)
            {
                var item = bucket[index];
                if (key.Equals(item.Key))
                {
                    return((Resolver <T>)item.Value);
                }
            }

            return(container.TryGetResolver <T>(new Key(typeof(T), tag.Value), out var resolver, out var error, container) ? resolver : container.Resolve <ICannotGetResolver>().Resolve <T>(container, new Key(typeof(T), tag), error));
        }
Example #2
0
        public static T Resolve <T>([NotNull] this Container container)
        {
            var bucket = container.ResolversByType.Buckets[TypeDescriptor <T> .HashCode & container.ResolversByType.Divisor].KeyValues;

            foreach (var item in bucket)
            {
                if (typeof(T) == item.Key)
                {
                    return(((Resolver <T>)item.Value)(container, EmptyArgs));
                }
            }

            return((
                       container.TryGetResolver <T>(new Key(typeof(T)), out var resolver, out var error, container)
                    ? resolver
                    : container.Resolve <ICannotGetResolver>().Resolve <T>(container, new Key(typeof(T)), error)
                       )(container, EmptyArgs));
        }