NET架构
文章平均质量分 79
蓝色水
一个在海边拾贝壳的大男孩
2002年毕业于上海市交通大学上中路校区,曾参与微软ALL-IN-ONE-CODE FRAMEWORK项目并对WPF,C++,C#,Winform的MSDN论坛支持多年,专注于net的技术体系十多年,对DDD领域设计net的部署实施有独到见解和经验,并对JAVA的架构体系的数据持久化,AOP,分布式事务,单点登录,多业态权限设计,分布式日志系统有实际项目运用案例,致力于传统行业的HR,OA,费控,业绩,移动平台化整合,ERP改造以及云部署。
展开
-
.NET 之 Docker 部署详细流程
开篇语自己从头开始走一遍docker部署.net的流程,作为一种学习总结,以及后续会写一些在该基础之上的文章。本次示例环境:vs2019、net5、docker、postman创建项目本次事例代码是用过vs2019创建的ASP.NET Core Web API项目目标框架是.NET 5,无需身份验证,不配置HTTPS(根据个人需求勾选),启动Docker(我习惯于后期添加),启用OpenAPI支持(添加swagger文档)默认配置创建完成后,我们查看项目目录为下转载 2021-07-15 14:57:24 · 1006 阅读 · 0 评论 -
WebApi_基于token的多平台身份认证架构设计(Z)
1 概述在存在账号体系的信息系统中,对身份的鉴定是非常重要的事情。随着移动互联网时代到来,客户端的类型越来越多, 逐渐出现了 一个服务器,N个客户端的格局 。不同的客户端产生了不同的用户使用场景,这些场景:有不同的环境安全威胁不同的会话生存周期不同的用户权限控制体系不同级别的接口调用方式综上所述,它们的身份认证方式也存在一定的区别。本文将使用一定的篇幅对这些场景进行一些分析和梳理工作。2 ...转载 2018-07-06 10:40:14 · 786 阅读 · 0 评论 -
.NET程序集强命名删除与再签名技术 源代码剖析
如果你想去除一个程序集的强签名(strong name),目前为止可以有两个途径1 反编译为IL代码,删除签名部分,再编译为程序集2 应用Re-Sign程序,直接对一个程序集再签名 生成和读取强命名先来看,如何生成.NET的签名文件,调用命令SN传入参数。下面的代码读取该文件,FileStream keyPairFile =转载 2016-05-09 17:09:56 · 4571 阅读 · 0 评论 -
DataTable的过滤器的三种做法
前两种是公司老大平时用的dataTable.select和dataview.filter后面这种是用的CurrencyManager cm = (CurrencyManager)BindingContext[ConditionGridView.DataSource]; int rowCount = cm.Count; fo原创 2007-12-03 09:17:00 · 6181 阅读 · 0 评论 -
C#提示框写法
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using C_Global;using C_Event;namespace原创 2007-10-29 10:24:00 · 4596 阅读 · 0 评论 -
读visual studio net使用技巧_chinese学技巧
把代码放入工具箱 每个项目中都有一些会反复使用的代码段或文本,比如你需要在每个文件开头放置的版权页面,或者一小段用于实现常用功能的代码.如果你发现你把同样的代码粘贴了好多次,把它放进工具箱里或许会更好一些(就是列出所有窗口控件和网页控件,用Ctrl-Alt-X可以调出的那个窗口).选中你所需要的文字,把它拖进工具箱的"通用"选项卡下面.原创 2007-09-01 22:09:00 · 1265 阅读 · 0 评论 -
第12章 枚举类型与位标记-----《Microsoft.NET框架程序设计》
13.2 位标记 开发人员通常要用到位标记(bit flag)集合.当我们调用System.IO.File类型的GetAttributes方法时,它会返回一个FileAttribute类型的实例.FileAttribute类型是一个基础类型为Int32的枚举类型,其每个位反映了文件的一个属性(attribute),FCL中FileAttribute类型定义如下: [Flags,S原创 2007-07-18 21:40:00 · 953 阅读 · 0 评论 -
第三部分 类型设计2------《Microsoft.NET框架程序设计》
在C#中,含参属性(索引器)可以类似数组的语法来访问.换句话说,我们可以将索引器看作是重载[]操作符的一种方式.下面演示的是一个BitArray类型的例子,它允许我们用类似数组的语法来访问该类型实例中保存的一组位. public class BitArray { //一个用于保存位的私有字节数组 private Byte[原创 2007-07-08 23:13:00 · 795 阅读 · 0 评论 -
第三部分 类型设计------《Microsoft.NET框架程序设计》
还有一些原因支持我们对一个类型的数据字段的访问进行封装.例如,我们可能希望在访问一个字段的同时执行一些额外的操作,或者缓存某个数值,或者延迟创建某个内部对象.我们也可能希望对字段的访问是线程安全的.或者字段可能只是一个逻辑表示,其真正的值并不是以字节的形式存放在内存中,而是通过某种算法计算得来的.原创 2007-07-08 22:05:00 · 796 阅读 · 0 评论 -
第4部分 类型设计-----《Microsoft.NET框架程序设计》
有时我们会感到编译器自动产生的add和remove方法不够理想.例如,如果我们需要频繁地添加或者移除委托实例,同时我们又知道我们的应用程序是在单线程环境下运行,这时再对包含委托实例的对象进行同步访问的话就会损伤应用程序的性能. 另外,如果我们的类型定义了许多事件,那么我们也会对编译器自动产生的add和remove方法感到不够满意. 幸运的是,C#和许多其他的编译器都允原创 2007-07-09 12:47:00 · 749 阅读 · 0 评论 -
第4部分 事件2-----《Microsoft.NET框架程序设计》
有时我们会感到编译器自动产生的add和remove方法不够理想.例如,如果我们需要频繁地添加或者移除委托实例,同时我们又知道我们的应用程序是在单线程环境下运行,这时候再对包含委托实例的对象进行同步访问的话就会损伤应用程序的性能. 另外,如果我们的类型定义了许多事件,那么我们也会对编译器自动产生的add和remove方法感到不够满意. 幸运的是,c#和许多其他的编译器都允原创 2007-07-09 12:23:00 · 750 阅读 · 0 评论 -
第4部分 事件-----《Microsoft.NET框架程序设计》
定义一个事件成员意味着类型为我们提供了以下三种能力: 允许对象登记该事件. 允许对象注销该事件. 允许定义事件的对象维持一个登记对象的集合,并在某些特定的事情发生时通知这些对象.原创 2007-07-09 08:53:00 · 709 阅读 · 0 评论 -
第12章 文本处理-----《Microsoft.NET框架程序设计》
有三种技巧允许我们在数值和Char实例之间进行转换.下面按推荐使用的优先顺序列出了它们: 转型 将一个Char转型成一个数值(如Int32)最容易的方法便是转型.在三种技巧中,这种技巧的效率最高,因为编译器会直接产生IL指令来执行转换,而不会有任何的方法调用.另外,某些语言(例如C#)允许我们告诉编译器是否使用checked或unchecked代码来执行原创 2007-07-12 12:35:00 · 665 阅读 · 0 评论 -
第九部分 方法----读《Microsoft.NET框架程序设计》
在C#中,我们使用implicit关键字来告诉编译器,在源代码中不必做显式的转型就可以产生调用转换操作符方法的代码;而使用explicit关键字来告诉编译器只有当源代码中指定了显式的转型时,才产生调用转换操作符方法的代码. 在implicit或者explicit关键字后面,我们需要指定operator关键字来告诉编译器该方法是一个转换操作符.在operator关键字后面,我们还需原创 2007-07-07 08:36:00 · 801 阅读 · 0 评论 -
第三部分 类型设计-----《Microsoft.NET框架程序设计》
CLR允许我们使用Abstract或者Sealed来修饰一个类型,但两者不可能同时使用,这种限制有些令人遗憾,毕竟总有一些类型,我们既不希望创建她们的实例,也不希望她们作为基类型被继承. 比如,创建一个Console或者Math类型的实例就没有任何意义,因为它们仅包含了一些静态方法.通过继承她们来定义新的类型同样没有意义.这时如果能将它们同时标识为Abstact(不允许创建实例)原创 2007-07-06 12:43:00 · 700 阅读 · 0 评论 -
第二部分 类型与通用语言运行时2-----《Microsoft.NET框架程序设计》
一个类型必须同时重写Equals方法和GetHashCode方法是因为System.Collections.Hashtable类型的实现要求任何两个相等的对象都必须有相同的散列码值.所以如果我们重写了Equals方法,我们也应该重写GetHashCode方法以确保用来判等的算法和用来计算对象散列码的算法一致. 基本上来讲,当我们向一个Hashtable对象中添加一个"键/值对"时原创 2007-07-05 12:42:00 · 747 阅读 · 0 评论 -
第五部分 基元类型、引用类型与值类型----读《Microsoft.NET框架程序设计》
严格地讲,拆箱操作不会拷贝任何字段.但通常情况下,拆箱操作后会紧跟着一个字段拷贝操作,将字段从托管堆拷贝到堆栈中。实际上,在C#中,拆箱操作总是紧跟着一个字符拷贝操作.看下面的代码: static void Main(){ Point p; p.x=p.y=1; Object o=p; //原创 2007-07-04 08:23:00 · 706 阅读 · 0 评论 -
第二部分 类型与通用语言运行时----------------读《Microsoft.NET框架程序设计》
拆箱和装箱并不是严格意义上的互反操作.拆箱操作的代价要比装箱操作小许多。拆箱操作仅仅是获取指向对象中包含的值类型部分(数据字段)的指针而已,它不会像装箱操作那样涉及到任何内存字节的拷贝.然而,紧接着拆箱之后典型的操作往往就是字段拷贝,这两个操作合起来与装箱操作才成为真正的互反操作. 对一个引用类型的拆箱操作通常由以下几步组成: 1.如果该引用为null,将会抛出一个原创 2007-07-04 00:32:00 · 752 阅读 · 0 评论