《Asp.Net 2.0 揭秘》读书笔记(十四)
创建组件
首先这里的组件不是通常意义的组件
*动态编译的过程的一个主要缺陷就是如果组件中出现任何错误,会导致整个站点出错不能运行;
*不同语言编写的组件需要放在不同的文件夹中,如果是一种语言写的就无所谓;
*静态(static)在其它语言中被称作共享,它是没有任何实例归属的;这句话太好了啊,记得学C++的时候就一直搞不懂,一直都是从它的实现机制上去理解,啥静态的不变的啦,后来用了一段时间后不这么想了,但是一直没有一个很好的理解总感觉缺点什么,共享两个字真的太好了,它的后半句话也解释了为什么静态变量不能引用其它的变量;
*Asp.Net这种多线程环境中使用共享成员变量和属性,可能会引发一些稀奇古怪的多线程并发问题,如果一定要使用静态属性,请尽量将其定义为只读;这个问题也一直困扰着我,哎,看好书就是如此的获益匪浅啊;
*静态构造函数在所有实例构造函数执行前执行,并且在程序生命中只执行一次,哈哈,这个是我当初看到有人用的时候自己悟出来,想想自己都感觉自己天才,吹完了~
*抽象类是Asp.Net 2.0 Provider的基础,如Personalization、Membership、Roles、等;
*新建组件类库的时候一般都要引用System.Web.dll的引用;
*引用有两种方法,一个是放在Bin目录下,不知道咋回事windows的程序都是直接自动搜索当前目录下的Bin文件夹中的程序集,另一个是直接放全局程序集缓存中就是C:\\windows\assembly
*添加到全局缓存签必须要先请命名程序集,类似于GUID,命令行工具(sn.exe –k KeyPair.snk),生成KeyPair.snk文件,中放着随机生成了公/私密钥;
*在AssemblyInfo.cs中
[assembly:AssemblykeyFile("KeyPair.snk")] [assembly:AssemblyVersion("0.0.0.0")]
四个0分别代表主版本号、副版本号、构建编号和修订编号
*加入全局缓存命令行(GacUtil.exe /i MyLibrary.dll)
*config中添加引用的代码示例:
<system.web>
<comilation>
<assemblies>
<add assembly="MyLibrary,Version=0.0.0.0,Culture=neutral,PublicKeyToken=123456123456"/>
</assemblies>
</coml\pilation>
</system.web>
*通常情况下避免全局应用程序集的使用
*当程序开始进入架构设计的时候会有很多问题值得思考,反正我只知道没有最完美的设计只有最适合当前的设计!
慢慢来,加油吧;
*简单的三层应用page468