Пример #1
0
        private bool TryGetUnderlyingSource(ITypeSymbol target, out InstanceSource instanceSource, out bool isAmbiguous, out IEnumerable <FactoryMethod> sourcesNotMatchingConstraints)
        {
            isAmbiguous = false;
            sourcesNotMatchingConstraints = Array.Empty <FactoryMethod>();
            if (_delegateParameters is not null && _delegateParameters.TryGetValue(target, out var delegateParameter))
            {
                instanceSource = delegateParameter;
                return(true);
            }

            if (_instanceSources.TryGetValue(target, out var instanceSources))
            {
                instanceSource = instanceSources.Best !;
                isAmbiguous    = instanceSource is null;
                return(!isAmbiguous);
            }

            if (_genericRegistrationsResolver.TryResolve(target, out var constructedFactoryMethod, out isAmbiguous, out sourcesNotMatchingConstraints))
            {
                instanceSource = constructedFactoryMethod;
                return(true);
            }