Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        /// <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);
        }