Ejemplo n.º 1
0
        public override void Init(IScriptExportManager manager)
        {
            m_template = manager.RetrieveType(Type.ElementType);

            int argumentCount = MonoUtils.GetGenericArgumentCount(Type);

            m_arguments = new ScriptExportType[argumentCount];
            for (int i = Type.GenericArguments.Count - argumentCount, j = 0; i < Type.GenericArguments.Count; i++, j++)
            {
                TypeReference argument = Type.GenericArguments[i];
                m_arguments[j] = manager.RetrieveType(argument);
            }

            if (Type.DeclaringType != null)
            {
                if (Type.DeclaringType.HasGenericParameters)
                {
                    IEnumerable <TypeReference> nestArguments = Type.GenericArguments.Take(Type.GenericArguments.Count - argumentCount);
                    GenericInstanceType         nestInstance  = MonoUtils.CreateGenericInstance(Type.DeclaringType, nestArguments);
                    m_nest = manager.RetrieveType(nestInstance);
                }
                else
                {
                    m_nest = manager.RetrieveType(Type.DeclaringType);
                }
            }
        }