使用基于类名的反射在同一个.dll中实例化一个类?

Fug*_*ugu 0 c# reflection

这应该很简单,但我无法找到告诉我如何做到这一点的任何地方.我有一个课,它和我用来做这个的dll一样.

我想做的就是这样.

thing.InstanceClass("ClassName");
Run Code Online (Sandbox Code Playgroud)

我想这样做而不做:

Assembly testAssembly = Assembly.LoadFile(@"c:\Test.dll");
Run Code Online (Sandbox Code Playgroud)

这是因为我想使用反射实例的类在同一个程序集中.

Mat*_*ott 5

Type instanceType = Type.GetType("SomeNamespace.SomeType");
object instance = Activator.CreateInstance(instanceType);
Run Code Online (Sandbox Code Playgroud)

Type.GetType(...)如果程序集已加载到AppDomain中,则可以解决此问题.

如果你需要的组件,您可以使用Assembly.GetEntryAssembly,或者可能typeof(SomeType).Assembly在那里SomeType为你的目标组装.

  • `Type.GetType(string)`不搜索AppDomain中每个程序集中的类型.[来自MSDN](http://msdn.microsoft.com/en-us/library/w3f99sx1.aspx):*"如果typeName包含命名空间但不包含程序集名称,则此方法仅搜索调用对象的程序集和Mscorlib. dll,按顺序."*所以只要这段代码被编译到存在`SomeNamespace.SomeType`的程序集中,这就行了.否则,它不会. (2认同)