ObjectBuilder DoGetObjectBuilder(Type concreteType, IInjectionTargetInfo injectionTargetInfo)
        {
            if (_registrationPolicies == null || !concreteType.IsConcrete())
            {
                return(null);
            }

            IAutoRegistrationPolicy matchPolicy = null;

            for (int i = 0; i < _registrationPolicies.Length; i++)
            {
                var autoRegistrationPolicy = _registrationPolicies[i];
                if (!autoRegistrationPolicy.ShouldRegister(concreteType))
                {
                    continue;
                }
                matchPolicy = autoRegistrationPolicy;
                break;
            }

            if (matchPolicy == null)
            {
                return(null);
            }

            IObjectRegistration registration;

            _registrar.Register(concreteType).In(matchPolicy.GetLifetimeProvider()).Return(out registration);
            if (!registration.ObjectBuilder.MatchCondition(injectionTargetInfo))
            {
                return(null);
            }

            _registrar.CommitRegistrations();
            return(registration.ObjectBuilder);
        }
 public static void RegisterModule(this IManualObjectRegistrar registrar, IRegistrationModule module)
 {
     module.Register(registrar);
     registrar.CommitRegistrations(); // TODO: Make sure we don't commit registration duplicatedly
 }