在运行时使用内部构造函数实例化类

时间:2014-11-24 20:56:22

标签: c# .net reflection

我在名为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

有什么想法吗?

1 个答案:

答案 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(...);

这对你有用。