莫相离 发表于 2015-1-16 22:40:58

ASP教程之.NET 静态加载程序集 (三)

我想详细了解ASP整站代码与PSP整站代码有什么优缺点,那个更好,更安全,更用容易维护,和管理。。。我们先看看一样平常的反射的静态办法查找
上面为ms自带的例子ms-help://MS.VSCC/MS.MSDNVS.2052/cpref/html/frlrfsystemreflectionmethodbaseclassinvoketopic.htm
publicclassA
{
publicvirtualintmethod(){return0;}
}
publicclassB
{
publicvirtualintmethod(){return1;}
}
classMymethodinfo
{
publicstaticintMain()
{
Console.WriteLine("
Reflection.MethodInfo");
AMyA=newA();
BMyB=newB();
//GettheTypeandMethodInfo
TypeMyTypea=Type.GetType("A");
MethodInfoMymethodinfoa=MyTypea.GetMethod("method");
TypeMyTypeb=Type.GetType("B");
MethodInfoMymethodinfob=MyTypeb.GetMethod("method");
//GetanddisplaytheInvokemethod
Console.Write("
Firstmethod-"+MyTypea.FullName+
"returns"+Mymethodinfoa.Invoke(MyA,null));
Console.Write("
Secondmethod-"+MyTypeb.FullName+
"returns"+Mymethodinfob.Invoke(MyB,null));
return0;
}
}
上面是用接口查询办法,实例创立工具,再实行实例工具
usingSystem;
publicinterfaceIPoint
{
//returnnowclassofshixinterface
stringReturnNowClass();
}
下面文件为ClassSuc.cs编纂为ClassSuc.dll。
usingSystem;
namespaceClassLib1
{
publicclassClass1:IPoint
{
publicClass1()
{
}
publicstringReturnNowClass()
{
return"wecloneExecuteClassLib1Class1";
}
}
}
将ClassSuc.dll的也增加到下面文件,Class1完成了Ipoint接口
编纂文件为ClassLib1.dll
usingSystem;
namespaceClassLib2
{
publicclassClass2:IPoint
{
publicClass2()
{

}
publicstringReturnNowClass()
{
return"ClassLib2"+"Class2"+"weclone";
}
}
}
将ClassSuc.dll的也增加到下面文件,Class2完成了Ipoint接口
编纂文件为ClassLib2.dll
大概你已看和做的不腻烦了,你大概要要问,你究竟想讲甚么????
注重,将下面的三个dllcopy在统一路径下这里为“C:/test”
usingSystem;
usingSystem.Reflection;
classLoadExe
{

staticvoidMain(string[]args)
{
//Usethefilenametoloadtheassemblyintothecurrentapplicationdomain.
Assemblyb;
b=Assembly.LoadFrom(@"C:/test/ClassSuc.dll");
Type[]mytypes=b.GetTypes();
//showb中的接口IPoint
foreach(Typetinmytypes)
{
Console.WriteLine(t.FullName);
}
MethodInfoMethod=mytypes.GetMethod("ReturnNowClass");
//Getthemethodtocall.
Assemblya;
stringk=Console.ReadLine();
//输出年夜于10时,挪用ClassLib1.dll的办法不然挪用ClassLib2的办法
if(Convert.ToInt32(k)>10)
a=Assembly.LoadFrom(@"C:/test/ClassLib1.dll");
else
a=Assembly.LoadFrom(@"C:/test/ClassLib2.dll");
Type[]types=a.GetTypes();
//showb中的ClassLib1.Class1或ClassLib2.Class2
foreach(Typetintypes)
{
Console.WriteLine(t.FullName);
}
//CreateaninstanceoftheHelloWorldclass.
Objectobj=Activator.CreateInstance(types);
//Invokethemethod.
Console.WriteLine(Method.Invoke(obj,null));
Console.ReadLine();
}
}
实行效果为:
Ipoint
这时候请求输出输出
13
持续实行显现
ClassLib1.Class1
wecloneExecuteClassLib1Class1
请求输出时输出
5
持续实行显现
ClassLib2.Class2
wecloneExecuteClassLib2Class2
完成了甚么,经由过程接口静态加载程序集。
意义:反射机制完成静态插拔,只需变动设置文件和XCOPY响应的组件,
能够不必编译就间接定制出一个特定体系
弱点:功能打击速率慢
有的人还要问,既然可以静态加载程序集
那怎样显现卸载程序集CLR不撑持卸载程序集但能够卸载AppDomain包括的一切的程序集。AppDomain.Unload办法卸载指定的使用程序域。
本还想写一文章报告静态程序集但本人了解不敷,又以为意义不年夜以是把那些器材,本人也不想学那些器材(太急躁的体现),以是提到这里来。
静态程序集是编译器或工具在运转时收回元数据和MSIL,并可在磁盘上天生可移植可实行(PE)文件(分歧于下面的谁人静态加载程序集)
在运转时界说程序集,然后运转这些程序集并/或将它们保留到磁盘。
在运转时界说新程序会合的模块,然后运转这些模块并/或将它们保留到磁盘。
在运转时界说范例,创立这些范例的实例,并挪用这些范例的办法。
程序集---》模块---》范例―》实例的办法
详细见
ms-help://MS.NETFrameworkSDK.CHS/cpguidenf/html/cpconemittingdynamicassemblies.htm
ms-help://MS.VSCC/MS.MSDNVS.2052/cpref/html/frlrfsystemappdomainclassdefinedynamicassemblytopic.htm
感激bitfan(数字天下一伟人)()使得本人有如许的劳绩


楼上说交互性不好,太牵强了吧。在微软提供的一套框架中,利用asp做网站,开发效率高,使用人数少,减少不必要的开销。交互性是互动方式,是有开发人员决定的。

再见西城 发表于 2015-1-19 21:12:47

Session:这个存储跟客户端会话过程的数据,默认20分钟失效

老尸 发表于 2015-1-28 10:53:38

ASP的语言不仅仅只是命令格式差不多,而是包含在<%%>之内的命令完全就是VB语法。虽然ASP也是做为单独的一个技术来提出的,但他就是完全继承了VB所有的功能。

山那边是海 发表于 2015-2-5 20:49:26

如何更好的使自己的东西看上去很不错等等。其实这些都不是问题的实质,我们可以在实践中不断提升自己,不断充实自己。

若天明 发表于 2015-2-13 14:24:11

Response:从字面上讲是“响应”,因此这个是服务端向客户端发送东西的,例如Response.Write

灵魂腐蚀 发表于 2015-3-3 22:40:32

它可通过内置的组件实现更强大的功能,如使用A-DO可以轻松地访问数据库。

精灵巫婆 发表于 2015-3-11 14:24:55

Session:这个存储跟客户端会话过程的数据,默认20分钟失效

活着的死人 发表于 2015-3-18 23:10:48

如何更好的使自己的东西看上去很不错等等。其实这些都不是问题的实质,我们可以在实践中不断提升自己,不断充实自己。

爱飞 发表于 2015-3-26 20:35:40

代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。
页: [1]
查看完整版本: ASP教程之.NET 静态加载程序集 (三)