public T Instantiate <T>(string rTypeName, params object[] rArgs)
        {
            TypeResolveAssembly rAssembly = null;
            var rType = GetType(rTypeName, out rAssembly);

            if (rType == null)
            {
                return(default);
        public TypeResolveAssembly GetAssembly(Type rType)
        {
            var rTypeAssemblyName = rType.Assembly.GetName().Name;

            TypeResolveAssembly rAssembly = null;

            mAssemblies.TryGetValue(rTypeAssemblyName, out rAssembly);
            return(rAssembly);
        }
        public Type[] GetTypes(string rAssemblyName)
        {
            TypeResolveAssembly rAssembly = null;

            if (mAssemblies.TryGetValue(rAssemblyName, out rAssembly))
            {
                return(rAssembly.GetAllTypes());
            }
            return(null);
        }
        public object Invoke(object rObj, string rTypeName, string rMethodName, params object[] rArgs)
        {
            TypeResolveAssembly rAssembly = null;
            var rType = GetType(rTypeName, out rAssembly);

            if (rType == null)
            {
                return(null);
            }

            return(rAssembly.Invoke(rObj, rTypeName, rMethodName, rArgs));
        }
        public object Instantiate(string rTypeName, params object[] rArgs)
        {
            TypeResolveAssembly rAssembly = null;
            var rType = GetType(rTypeName, out rAssembly);

            if (rType == null)
            {
                return(null);
            }
            if (rAssembly == null)
            {
                return(null);
            }

            return(rAssembly.Instantiate(rTypeName, rArgs));
        }
 public Type GetType(string rTypeName, out TypeResolveAssembly rTypeResolveAssembly)
 {
     rTypeResolveAssembly = null;
     foreach (var rPair in mAssemblies)
     {
         var rTypes = rPair.Value.GetAllTypes();
         for (int i = 0, len = rTypes.Length; i < len; i++)
         {
             if (rTypes[i].FullName.Equals(rTypeName))
             {
                 rTypeResolveAssembly = rPair.Value;
                 return(rTypes[i]);
             }
         }
     }
     return(null);
 }
        public void AddAssembly(string rAssemblyName, bool bIsHotfix = false)
        {
            TypeResolveAssembly rTypeResolveAssembly = null;

            if (bIsHotfix)
            {
                rTypeResolveAssembly = new TypeResolveAssembly_Hotfix(rAssemblyName);
            }
            else
            {
                rTypeResolveAssembly = new TypeResolveAssembly_Mono(rAssemblyName);
            }
            rTypeResolveAssembly.Load();
            if (!mAssemblies.ContainsKey(rAssemblyName))
            {
                mAssemblies.Add(rAssemblyName, rTypeResolveAssembly);
            }
        }