public static IConfigurator ResolveAssembly(this IConfigurator self, bool onlyInterfacesOrAbstracts, Assembly assembly, Action <IScopeContext> scopeHandler = null)
        {
            if (scopeHandler == null)
            {
                scopeHandler = a => { a.SetTransientScope(); }
            }
            ;
            foreach (var definedType in assembly.DefinedTypes)
            {
                if (onlyInterfacesOrAbstracts && !definedType.IsConcreteType())
                {
                    continue;
                }
                var name = definedType.GetAttribute <ImplementationKeyAttribute>() != null?definedType.GetAttribute <ImplementationKeyAttribute>().Name : TypeLocatorNames.DefaultName;

                var implementations = FindImplementations(definedType);
                foreach (var implementation in implementations)
                {
                    scopeHandler(definedType.IsGenericTypeDefinition ? self.BindAsGeneric(definedType).To(implementation, name) : self.Bind(definedType).To(definedType, name));
                }
            }
            return(self);
        }