我在名为Foobar
的名称空间Giggles
中有一个类。另一个名为Monkey
的名称空间中的类。他们都在同一个集会中。
Monkey
看起来像这样:
namespace Foobar {
public class Monkey {
internal Monkey () { }
...
这是唯一的构造函数Monkey
,我无法更改其源代码。
现在,在Giggles
中的方法中,我想使用包含其类名的字符串来实例化Monkey
。
这不起作用:
var className = "Foobar.Monkey";
var monkley = Assembly.GetExecutingAssembly().CreateInstance(className);
提供此异常消息:"Constructor on type 'Foobar.Monkey' not found."
,异常类型为System.MissingMethodException
。
有什么想法吗?
答案 0 :(得分:1)
您可以尝试将Type.GetConstructors与适当的绑定标志一起使用
/* bindings are: non public and instance to find an internal ctor */
ConstructorInfo monkeyCtor = typeof(Monkey).GetConstructors
(BindingFlags.Instance | BindingFlags.NonPublic)[0];
/* actual invokation of constructor*/
Monkey monkeyInstance = (Monkey ) monkeyCtor.Invoke(...);
这对你有用。