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); }