public void AddDependency(IDependencyDescriptor descriptor)
        {
            var dependency = Convert(descriptor);

            if (this.Dependencies.Contains(dependency))
            {
                return;
            }
            this.Dependencies.Add(dependency);
        }
        protected override bool TryGetDependency(Type definition, out IDependencyDescriptor descriptor)
        {
            if (definition == typeof(IDependencyProvider))
            {
                descriptor = _providerDescriptor;

                return(true);
            }

            descriptor = null;

            return(false);
        }
        protected override bool TryGetDependency(Type definition, out IDependencyDescriptor descriptor)
        {
            if (definition == typeof(ILifetimeScope))
            {
                descriptor = _scopeDescriptor;

                return(true);
            }

            descriptor = null;

            return(false);
        }
        internal DependencyProviderCallStack CreateChild(IDependencyDescriptor descriptor)
        {
            if (descriptor == null)
            {
                throw new ArgumentNullException(nameof(descriptor));
            }

            DependencyStack childStack = _dependencyStack.CreateChild(descriptor);

            childStack.EnsureParentNotSingleton();
            childStack.EnsureNoCircularDependencies();

            return(new DependencyProviderCallStack(LifetimeScope, childStack));
        }
        public DependencyProviderResolver(IDependencyProvider provider, IDependencyResolver innerResolver)
        {
            if (provider == null)
            {
                throw new ArgumentNullException(nameof(provider));
            }

            InnerResolver = (DependencyResolverBase)innerResolver ?? throw new ArgumentNullException(nameof(innerResolver));

            _providerDescriptor = new ReferenceDependencyDescriptor(typeof(IDependencyProvider), _ => provider)
            {
                Lifetime = Lifetime.Scoped,
                Binding  = Binding.Unbound
            };
        }
        public LifetimeScopeResolver(LifetimeScope lifetimeScope, IDependencyResolver innerResolver)
        {
            if (lifetimeScope == null)
            {
                throw new ArgumentNullException(nameof(lifetimeScope));
            }

            InnerResolver = (DependencyResolverBase)innerResolver ?? throw new ArgumentNullException(nameof(innerResolver));

            _scopeDescriptor = new ReferenceDependencyDescriptor(typeof(ILifetimeScope), _ => lifetimeScope.ParentScope ?? throw new InvalidScopeException())
            {
                Lifetime = Lifetime.Singleton,
                Binding  = Binding.Unbound
            };
        }
        protected virtual PackageDependency Convert(IDependencyDescriptor descriptor)
        {
            var version = new VersionSpec()
            {
                IsMaxInclusive = descriptor.IsMaxInclusive,
                IsMinInclusive = descriptor.IsMinInclusive,
            };

            if (!string.IsNullOrEmpty(descriptor.MinVersion))
            {
                version.MinVersion = new SemanticVersion(descriptor.MinVersion);
            }
            if (!string.IsNullOrEmpty(descriptor.MaxVersion))
            {
                version.MaxVersion = new SemanticVersion(descriptor.MaxVersion);
            }
            var dependency = new PackageDependency(descriptor.Id, version);

            return(dependency);
        }
示例#8
0
        public static bool CheckIfAdded <TDefinition>(this IDependencyCollection collection, Action <IDependencyCollection> register)
        {
            IDependencyDescriptor descriptor = collection.Get <TDefinition>();

            if (descriptor == null)
            {
                register.Invoke(collection);

                return(collection.HasDependency <TDefinition>());
            }

            int oldHashCode = descriptor.GetHashCode();

            register.Invoke(collection);

            descriptor = collection.Get <TDefinition>();

            if (descriptor == null)
            {
                return(false);
            }

            return(oldHashCode != descriptor.GetHashCode());
        }
 public DependencyProviderCallStack(LifetimeScope lifetimeScope, IDependencyDescriptor descriptor) : base(lifetimeScope)
 {
     _dependencyStack = new DependencyStack(descriptor ?? throw new ArgumentNullException(nameof(descriptor)));
 }
示例#10
0
 /// <summary>
 /// Creates a new instance of <see cref="DependencyInstance"/>.
 /// </summary>
 /// <param name="instance">The instance of the dependency.</param>
 /// <param name="descriptor">The dependency descriptor of this instance.</param>
 public DependencyInstance(object instance, IDependencyDescriptor descriptor)
 {
     Descriptor   = descriptor ?? throw new ArgumentNullException(nameof(descriptor));
     Instance     = instance ?? throw new ArgumentNullException(nameof(instance));
     IsDisposable = instance.GetType().HasInterface <IDisposable>();
 }
 protected abstract bool TryGetDependency(Type definition, out IDependencyDescriptor descriptor);
 protected override bool TryGetDependency(Type definition, out IDependencyDescriptor descriptor)
 {
     throw new NotImplementedException();
 }
        protected override bool TryGetDependency(Type definition, out IDependencyDescriptor descriptor)
        {
            descriptor = _dependencyCollection.Get(definition);

            return(descriptor != null);
        }
示例#14
0
 public CircularDependencyException(IDependencyDescriptor type) : base($"Circular dependencies found for {type.ImplementationType.Name}")
 {
 }