看了网上很多关于DotNet动态创建类的实例的文章,我这里想总结一下,其实方法很简单,就是用“Activator.CreateInstance”。但是这个方法需要待创建的类的Type作为参数,为了获得该参数,可以利用[Assembly].GetType方法,这个方法只需要待创建的类的名称(名称字符串)就可以了,最后的问题就是要获得这个类所在的程序集。如何获得待创建的类所在程序集,那么就解决了这个问题。
        大家可以参考http://www.cnblogs.com/ShadowK/archive/2006/11/14/560131.html,费了很多笔墨写了一个比较完整的动态构造类的设计器。其实,在获得程序集这个问题上,可以有更简单的办法,以下是我的做法。
        利用Microsoft.VisualBasic.VBCodeProvider(),如果是C#可以用CSharpCodeProvider(),将类文件编译成为DLL文件,然后利用[Assembly].LoadFrom("DLL 的绝对路径")加载该DLL。这样我们可以避免在那些创建DLL和Type的复杂代码。我告诉我的项目组成员这个例子后,强调要打开思路,Simple is perfect,凡事都尽量找简便的方法来实现,客户永远不会为我们那些复杂的代码多花一分钱。
1.执行编译任务的方法:


2.编译DLL,并动态创建类的实例。(这里类的原文件是Class1.vb文件,放在WebSite的App_Code文件夹中了,实际使用时可以放在任意物理位置。)

用.net动态创建类的实例        Dim strSourceFileName As String = Server.MapPath("~/App_Code/Class1.vb"'类文件的全路径
用.net动态创建类的实例
        Dim strDllPath As String = Server.MapPath("~/App_Code"'编译后的DLL文件存放的位置
用.net动态创建类的实例
        Dim strDllName As String = "" 'DLL的全路径(返回值)
用.net动态创建类的实例
        CompileExecutable(strSourceFileName, strDllPath, strDllName) '编译原文件为DLL文件
用.net动态创建类的实例

用.net动态创建类的实例        
Dim a As [Assembly= [Assembly].LoadFrom(strDllName) '加载DLL
用.net动态创建类的实例
        Dim myType As System.Type = a.GetType("Class1"'获得Class1的Type
用.net动态创建类的实例
        Dim obj As Object = Activator.CreateInstance(myType) '获得Class1的实例

3.Class1.vb原文件
End Class

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-12-31
  • 2021-09-02
  • 2022-12-23
  • 2021-12-01
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-11-23
  • 2021-10-29
  • 2022-12-23
相关资源
相似解决方案