简体   繁体   中英

Get type in referenced assembly by supplying class name as string?

These are similar questions: How-to: Load a type from a referenced assembly at runtime using a string in Silverlight , GetType on a class in a referenced assembly fails but neither answer works.

I've got an MVC project that pulls data from a database that includes the plain types as strings. These types are in a referenced assembly, not in the MVC project.

So for example let's say my Referenced Assembly Name is MyFramework and the plain type name Car , the full type name could be MyFramework.Cars.Car or MyFramework.Vehicles.Cars.Car or some other variation. All I have are the referenced assembly name and plain class name as strings. How can I get the type regardless of the full type name?

Finally, could I write a function in the referenced assembly that calls GetType() and use that in the MvC project so I could forego including the assembly name? I want to remove knowing the assembly name so I thought I could write a Util IN the referenced assembly like:

namespace MyFramework //the referenced assembly
{
  public static class TypeUtil
  {
    public static Type GetFrameworkType(string typeName)
    {
        return Type.GetType(typeName);
    }
  }
}

And then in my MVC project I could call it without needing the assembly as a string name. Is that possible or will I always need the assembly name?

Maybe the referenced assembly isn't loaded at the time. Also, I understand from your question that you do not have the full type name, only the class name.
You should try something along this line then:

Type type = Assembly.Load("YourAssemblyName").GetTypes().First(t => t.Name == "ShortTypeName");

Hope I understood you correctly.

For the first question, you could do something like

Type t = AppDomain.CurrentDomain.GetAssemblies()
                                .Where(a => a.FullName == "MyFramework")
                                .SelectMany(a => a.GetTypes())
                                .FirstOrDefault(t => t.Name == "Car");

I am not sure what you mean by the second question.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM