public static void FillEntityView <T>(this IEntityBuilder entityBuilder
                                          , ref T entityView
                                          , FasterList <KeyValuePair <Type, ActionCast <T> > > entityViewBlazingFastReflection
                                          , object[] implementors)
    {
        int count;

        //efficient way to collect the fields of every EntityViewType
        var setters =
            FasterList <KeyValuePair <Type, ActionCast <T> > >
            .NoVirt.ToArrayFast(entityViewBlazingFastReflection, out count);

        for (var index = 0; index < implementors.Length; index++)
        {
            var implementor = implementors[index];

            if (implementor != null)
            {
                var type = implementor.GetType();

                Type[] interfaces;
                if (_cachedTypes.TryGetValue(type, out interfaces) == false)
                {
                    interfaces = _cachedTypes[type] = type.GetInterfacesEx();
                }

                for (var iindex = 0; iindex < interfaces.Length; iindex++)
                {
                    var componentType = interfaces[iindex];
#if DEBUG && !PROFILER
                    Tuple <object, int> implementorData;

                    if (implementorsByType.TryGetValue(componentType, out implementorData))
                    {
                        implementorData.numberOfImplementations++;
                        implementorsByType[componentType] = implementorData;
                    }
                    else
                    {
                        implementorsByType[componentType] = new Tuple <object, int>(implementor, 1);
                    }
#else
                    implementorsByType[componentType] = implementor;
#endif
                }
            }
#if DEBUG && !PROFILER
            else
            {
                Svelto.Console.Log(NULL_IMPLEMENTOR_ERROR.FastConcat(" entityView ",
                                                                     entityBuilder.GetEntityType().ToString()));
            }
#endif
        }

        for (var i = 0; i < count; i++)
        {
            var fieldSetter = setters[i];
            var fieldType   = fieldSetter.Key;

#if DEBUG && !PROFILER
            Tuple <object, int> component;
#else
            object component;
#endif

            if (implementorsByType.TryGetValue(fieldType, out component) == false)
            {
                var e = new ECSException(NOT_FOUND_EXCEPTION + " Component Type: " + fieldType.Name +
                                         " - EntityView: " + entityBuilder.GetEntityType().Name);

                throw e;
            }
#if DEBUG && !PROFILER
            if (component.numberOfImplementations > 1)
            {
                throw new ECSException(DUPLICATE_IMPLEMENTOR_ERROR.FastConcat(
                                           "Component Type: ", fieldType.Name, " implementor: ",
                                           component.implementorType.ToString()) + " - EntityView: " +
                                       entityBuilder.GetEntityType().Name);
            }
#endif
#if DEBUG && !PROFILER
            fieldSetter.Value(ref entityView, component.implementorType);
#else
            fieldSetter.Value(ref entityView, component);
#endif
        }

        implementorsByType.Clear();
    }