/// <summary> /// Creates new instance and adds to pool /// </summary> protected virtual async Task <PoolServiceDescriptor <TService> > CreateNew(IContainerScope scope, bool locked) { PoolServiceDescriptor <TService> descriptor = new PoolServiceDescriptor <TService>(); descriptor.Locked = locked; descriptor.Scope = scope; descriptor.LockExpiration = DateTime.UtcNow.Add(Options.MaximumLockDuration); if (Type == ImplementationType.Scoped && scope != null) { //we couldn't find any created instance. create new. object instance = await Container.CreateInstance(typeof(TImplementation), scope); scope.PutItem(typeof(TService), instance); descriptor.Instance = (TService)instance; } else { object instance = await Container.CreateInstance(typeof(TImplementation), scope); descriptor.Instance = (TService)instance; } if (_func != null) { _func(descriptor.Instance); } lock (_descriptors) _descriptors.Add(descriptor); return(descriptor); }
/// <summary> /// Creates new instance and adds to pool /// </summary> protected virtual PoolServiceDescriptor <TService> CreateNew(IContainerScope scope, bool locked) { PoolServiceDescriptor <TService> descriptor = new PoolServiceDescriptor <TService>(); descriptor.Locked = locked; descriptor.Scope = scope; descriptor.LockExpiration = DateTime.UtcNow.Add(Options.MaximumLockDuration); if (Options.IdleTimeout > TimeSpan.Zero) { descriptor.IdleTimeout = DateTime.UtcNow + Options.IdleTimeout; } else { descriptor.IdleTimeout = null; } object instance = Descriptor.CreateInstance((TwinoServiceProvider)Container.GetProvider(), scope); if (Type == ImplementationType.Scoped && scope != null) { //we couldn't find any created instance. create new. scope.PutItem(typeof(TService), instance); descriptor.Instance = (TService)instance; } else { descriptor.Instance = (TService)instance; } if (_func != null) { _func(descriptor.Instance); } lock (Descriptors) Descriptors.Add(descriptor); return(descriptor); }