예제 #1
0
        /// <summary>
        /// Finds the specified identifier.
        /// </summary>
        /// <param name="typeId">The identifier.</param>
        /// <param name="args">The arguments.</param>
        /// <param name="types">The types.</param>
        /// <returns></returns>
        public IEnumerable <IRuntimeType> FindRuntimeTypes(string typeId, IEnumerable <string> args, IEnumerable <IRuntimeType> types)
        {
            var id          = Regex.Replace(typeId, @"\s", "");
            var func        = Regex.Match(id, @"([^()]+)(?:\((.*)\)){0,1}$");
            var constructor = id == func.Groups[1].Value ? Format.GetConstructor(id, args) : id;
            var cached      = Cache.Where((p) => p.Value == constructor).Select((p) => p.Key);
            var cachedCount = cached.Count();

            if (cachedCount > 0)
            {
                return(cached);
            }
            var count = types.Count();

            if (count > 0)
            {
                var name = func.Groups[1].Value;
                var pars = Regex.Matches(func.Groups[2].Value, @"([^,]+\(.+?\))|([^,]+)");
                IRuntimeType CacheRuntimeType(IRuntimeType runtimeType)
                {
                    if (!Cache.ContainsKey(runtimeType))
                    {
                        Cache.Add(runtimeType, constructor);
                    }
                    return(runtimeType);
                }

                return(types.Where((p) => p.MatchParameters(name, args, pars)).Select(CacheRuntimeType));
            }
            return(new IRuntimeType[0]);
        }
예제 #2
0
 /// <summary>
 /// Finds all dependency runtime types with full parameters specified
 /// </summary>
 /// <param name="runtimeTypes"></param>
 /// <param name="typeId"></param>
 /// <returns></returns>
 public static IRuntimeType[] FindRuntimeTypes(this IEnumerable <IRuntimeType> runtimeTypes, string typeId) =>
 runtimeTypes.Where((p) => typeId == Format.GetConstructor(p.TypeFullName, p.RuntimeTypes.Select((s) => s.TypeFullName))).ToArray();