Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Type.GetType() returning null [duplicate]

I have a web application that dynamically creates a web page using usercontrols.

Within my code I have the following:

    private void Render_Modules()
    {
        foreach (OnlineSystemPageCustom.OnlineSystemPageHdr.OnlineSystemPageModule item in custompage.Header.Modules)
        {
            if (item.ModuleCustomOrder != 99 && !item.ModuleOptional)
            {
                string typeName = item.ModuleInternetFile;
                Type child = Type.GetType(typeName);
                webonlinecustombase ctl = (webonlinecustombase)Page.LoadControl("../IPAM_Controls/webtemplatecontrols/" + child.Name.ToString() + ".ascx");
                ctl.Event = Event;
                ctl.custompage = custompage;
                ctl.custommodule = item;
                this.eventprogrammodules.Controls.Add(ctl);
            }
        }
    }

The "typeName" that is being returned (example) is:

IPAMIntranet.IPAM_Controls.webtemplatecontrols.eventorgcommittee

The namespace for the user controls is as follows:

namespace IPAMIntranet.IPAM_Controls

The problem I am having is that Type.GetType(typeName) is returning null. What am I missing here?

like image 399
mattgcon Avatar asked Jan 03 '12 17:01

mattgcon


2 Answers

Type.GetType(string) only looks in the currently executing assembly and mscorlib when you don't specify the assembly name within the string.

Options:

  • Use the assembly-qualified name instead
  • Call Assembly.GetType(name) on the appropriate assembly instead

If you have an easy way of getting hold of the relevant assembly (e.g. via typeof(SomeKnownType).Assembly) then the second option is probably simpler.

like image 105
Jon Skeet Avatar answered Sep 26 '22 13:09

Jon Skeet


Type.GetType looks as the calling assembly, and a few system assemblies. For anything else, you must either use assemblyInstance.GetType(typeName), or you must use the "assembly qualified name" of the type, which includes the assembly details in which the type can be found. Otherwise, it wont be found, and will return null. You can get that from:

string aqn = someType.AssemblyQualifiedName;
like image 20
Marc Gravell Avatar answered Sep 22 '22 13:09

Marc Gravell