调用System.Reflection.Assembly.GetExecutingAssembly()时,对象始终没有任何内容.CreateInstance

时间:2015-10-22 20:04:40

标签: asp.net vb.net reflection

基本上,在这段代码中,x总是没有......

dim x as new object
x = System.Reflection.Assembly.GetExecutingAssembly().CreateInstance("MyCode.MyClass") 

实际上,我真正想做的事情,最终是......(将x设置为MyCode.MyClass类的实例)......

dim x as new MyCode.MyClass

你知道第一组代码的问题是什么吗?

我知道你在想什么。 "为什么不采取第二种方式呢?"是的,那会更容易。但是,现在有一点背景:我们的asp.net网络应用程序中有相当复杂的业务规则,客户要求等等。但是,基本上,在我们的一个数据库表中有一个字段,它定义了变量的当前数据类型/类。该字段是一个字符串。因此,使用此字符串,并给出各种业务规则,我需要 动态 将我的变量x定义/实例化为某个类。在上面的示例" MyCode.MyClass"是字段中的字符串。因此,x对象需要是此类的实例。有时x将是" MyCode.MyClass"的实例,有时是" MyCode.AnotherClass"等的实例....

是否有比我上面编码更好的解决方案?

我也试过这个,这会产生错误...

Dim x As Object = System.Activator.CreateInstance(System.Reflection.Assembly.GetExecutingAssembly().FullName, "MyCode.MyClass").Unwrap()

对不起,这太复杂了。

更新1 :我越来越近了。当我尝试这个代码时,o和x打印出来并且看起来正确。

        o = System.Activator.CreateInstance("MyCode", "MyCode.MyClass").Unwrap
        Debug.Print(o.GetType.FullName)

        Dim x As New MyCode.MyClass
        Debug.Print(x.GetType.FullName)

但是,当我做一个x后跟"。" (获得intellisense)所出现的内容与o后跟"不同。"。有什么想法吗?当我这样做时,属性看起来是一样的......

        ' print out properties for each object
        Dim info() As PropertyInfo = o.GetType().GetProperties()
        Debug.Print(info.Length.ToString)

        Dim info2() As PropertyInfo = x.GetType().GetProperties()
        Debug.Print(info2.Length.ToString)

我认为这可能是因为在这个例子中o是迟到的。 Option strict目前正在进行中。我在想这个是正确的吗?如果是这样,反正这个呢?

0 个答案:

没有答案