private void RemoveValidator() { // No recursive calls detected, we can remove the validator to increase performance. // We first check for null, because this is faster. Every time we write, the CPU has to send // the new value to all the other CPUs. We only nullify the validator while using the GetInstance // method, because the BuildExpression will only be called a limited amount of time. if (this.validator != null) { this.validator = null; } }
internal InstanceProducer(Type serviceType, Registration registration, bool registerExternalProducer) { Requires.IsNotNull(serviceType, "serviceType"); Requires.IsNotNull(registration, "registration"); this.ServiceType = serviceType; this.Registration = registration; this.validator = new CyclicDependencyValidator(registration.ImplementationType); this.lazyExpression = new Lazy <Expression>(this.BuildExpressionInternal); this.initializationContext = new InitializationContext(this, registration); if (registerExternalProducer) { registration.Container.RegisterExternalProducer(this); } }
internal InstanceProducer(Type serviceType, Registration registration, bool registerExternalProducer) { Requires.IsNotNull(serviceType, nameof(serviceType)); Requires.IsNotNull(registration, nameof(registration)); Requires.IsNotOpenGenericType(serviceType, nameof(serviceType)); this.ServiceType = serviceType; this.Registration = registration; this.validator = new CyclicDependencyValidator(this); this.lazyExpression = new LazyEx <Expression>(this.BuildExpressionInternal); if (registerExternalProducer) { registration.Container.RegisterExternalProducer(this); } this.instanceCreator = this.BuildAndReplaceInstanceCreatorAndCreateFirstInstance; }
/// <summary>Initializes a new instance of the <see cref="InstanceProducer"/> class.</summary> /// <param name="serviceType">The service type for which this instance is created.</param> /// <param name="registration">The <see cref="Registration"/>.</param> public InstanceProducer(Type serviceType, Registration registration) { Requires.IsNotNull(serviceType, "serviceType"); Requires.IsNotNull(registration, "registration"); this.ServiceType = serviceType; this.Registration = registration; this.validator = new CyclicDependencyValidator(registration.ImplementationType); this.expression = new Lazy <Expression>(this.BuildExpressionInternal); // ExpressionRegistration is an internal Registration type. An InstanceProducer with this type // of registration doesn't have to be registered, since it will either always be registered // in the registrations dictionary anyway, or it is used to build up an InstanceProducer (by // the decorator sub system) that is only used for diagnostics. Allowing the latter producers to // be added, will clutter the diagnostic API and will cause the Verify() method to verify those // producers needlessly. if (!(registration is ExpressionRegistration)) { registration.Container.RegisterExternalProducer(this); } }