コード例 #1
0
        public static IEnumerable <ZenjectResolveException> ValidateObjectGraph(
            DiContainer container, Type concreteType, params Type[] extras)
        {
            using (container.PushLookup(concreteType))
            {
                var dependencies = InjectablesFinder.GetAllInjectables(concreteType);
                var extrasList   = extras.ToList();

                foreach (var dependInfo in dependencies)
                {
                    Assert.IsEqual(dependInfo.EnclosingType, concreteType);

                    if (TryTakingFromExtras(dependInfo.ContractType, extrasList))
                    {
                        continue;
                    }

                    var context = new ResolveContext(
                        dependInfo, container.LookupsInProgress.ToList(), null);

                    foreach (var error in ValidateContract(
                                 container, dependInfo.ContractType, context, dependInfo.Optional))
                    {
                        yield return(error);
                    }
                }

                if (!extrasList.IsEmpty())
                {
                    yield return(new ZenjectResolveException(
                                     "Found unnecessary extra parameters passed when injecting into '{0}' with types '{1}'.  \nObject graph:\n{2}"
                                     .With(concreteType.Name(), String.Join(",", extrasList.Select(x => x.Name()).ToArray()), container.GetCurrentObjectGraph())));
                }
            }
        }
コード例 #2
0
ファイル: DiContainer.cs プロジェクト: huomm23/ZenjectSample
        public IEnumerable <Type> GetDependencyContracts(Type contract)
        {
            Assert.That(!_hasDisposed);

            foreach (var injectMember in InjectablesFinder.GetAllInjectables(contract, false))
            {
                yield return(injectMember.ContractType);
            }
        }