Beispiel #1
0
        private LoadableClassInfo FindClassCore(LoadableClassInfo.Key key)
        {
            LoadableClassInfo info;

            if (_classesByKey.TryGetValue(key, out info))
            {
                return(info);
            }

            return(null);
        }
Beispiel #2
0
        private static LoadableClassInfo FindClassCore(LoadableClassInfo.Key key)
        {
            LoadableClassInfo info;

            if (_classesByKey.TryGetValue(key, out info))
            {
                return(info);
            }

            CacheLoadedAssemblies();

            if (_classesByKey.TryGetValue(key, out info))
            {
                return(info);
            }

            return(null);
        }
Beispiel #3
0
        private void AddClass(LoadableClassInfo info, string[] loadNames, bool throwOnError)
        {
            _classes.Add(info);
            bool isEntryPoint = false;

            foreach (var sigType in info.SignatureTypes)
            {
                _signatures[sigType] = true;

                foreach (var name in loadNames)
                {
                    string nameCi = name.ToLowerInvariant();

                    var key = new LoadableClassInfo.Key(nameCi, sigType);
                    if (_classesByKey.TryGetValue(key, out var infoCur))
                    {
                        if (throwOnError)
                        {
                            throw Contracts.Except($"ComponentCatalog cannot map name '{name}' and SignatureType '{sigType}' to {info.Type.Name}, already mapped to {infoCur.Type.Name}.");
                        }
                    }
                    else
                    {
                        _classesByKey.Add(key, info);
                    }
                }

                if (sigType == typeof(SignatureEntryPointModule))
                {
                    isEntryPoint = true;
                }
            }

            if (isEntryPoint)
            {
                ScanForEntryPoints(info);
            }
        }
Beispiel #4
0
        private static void AddClass(LoadableClassInfo info, string[] loadNames)
        {
            _classes.Enqueue(info);
            foreach (var sigType in info.SignatureTypes)
            {
                _signatures.TryAdd(sigType, true);

                foreach (var name in loadNames)
                {
                    string nameCi = name.ToLowerInvariant();

                    var key = new LoadableClassInfo.Key(nameCi, sigType);
                    if (!_classesByKey.TryAdd(key, info))
                    {
                        var infoCur = _classesByKey[key];
                        // REVIEW: Fix this message to reflect the signature....
                        Console.Error.WriteLine(
                            "CacheClassesFromAssembly: can't map name {0} to {1}, already mapped to {2}",
                            name, info.Type.Name, infoCur.Type.Name);
                    }
                }
            }
        }