在.Net框架搭建讲解中,提到了代码自动生成来减少开发人员人工作量,比如数据库对应的Model、最基层的Repository类和接口等等,除了类名不一样,其他都一样,没必要再手写一遍。
我在这里,介绍使用CodeSmith模版生成Model类,其他的都一样,拿到表名和各字段名、字段类型等等,想怎么生成就能怎么生成。
首先,在硬盘中,建立一个文件夹,用来放模版文件,比如:
F:\pukuimin\InjectExample\ExampleCodeSmithTemplate
在.Net框架搭建讲解中,提到了代码自动生成来减少开发人员人工作量,比如数据库对应的Model、最基层的Repository类和接口等等,除了类名不一样,其他都一样,没必要再手写一遍。
我在这里,介绍使用CodeSmith模版生成Model类,其他的都一样,拿到表名和各字段名、字段类型等等,想怎么生成就能怎么生成。
首先,在硬盘中,建立一个文件夹,用来放模版文件,比如:
F:\pukuimin\InjectExample\ExampleCodeSmithTemplate
UnitOfWorkContextBase.cs
EFRepositoryBase.cs
依赖注入对于开发人员来说,方便的就是不需要去关注具体的实现类,不需要去New实例对象,直接使用接口层就能让程序自动注入使用,当然,还有其他一些特点,比如web http同一个请求中可以设置同一个对象只实例化一次解决多个类中多次实例化对象浪费资源的问题。不多说,百度能得到更多 多的介绍,这边直接开工搭环境。
.Net中的System.Configuration命名空间为我们在web.config或者app.config中自定义配置提供了完美的支持。最近看到一些项目中还在自定义xml文件做程序的配置,所以忍不住写一篇用系统自定义配置的随笔了。
如果你已经对自定义配置了如指掌,请忽略这篇文章。
言归正传,我们先来看一个最简单的自定义配置
<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="simple" type="ConfigExample.Configuration.SimpleSection,ConfigExample"/> </configSections> <simple maxValue="20" minValue="1"></simple> </configuration>
在配置文件中使用自定义配置,需要在configSections中添加一个section元素,并制定此section元素对应的类型和名字。然后再在configuration根节点下面添加此自定义配置,如上例中的simple节点。simple节点只有两个整形数的属性maxValue和minValue。
简单三层框架,是.Net开发中最最基础的框架了,由 数据访问层、逻辑处理层、表示层组成。一般情况下,在项目中数据模型Model层也是单独一层,但是只是单纯的数据模型不算在业务层划分当中。
好了,框架搭建,如果不了解,可能会觉得难以下手,了解之后,自然知道怎么做,只是其中的步骤,比起单纯的功能开发,是要繁琐不少,下面我们来一步一步搭建属于自己的框架,这里只列出重要步骤,其他未提到的细节可自行摸索。
大部分功能逻辑都在,少量自定义异常类和扩展方法 ,可用类似代码自己替换
//EpPlus读取生成Excel帮助类+读取csv帮助类,epplus只支持开放的Excel文件格式:xlsx,不支持 xls格式
整理了一下表达式树的一些东西,入门足够了
先从ConstantExpression 开始一步一步的来吧 它表示具有常量值的表达式
我们选建一个控制台应用程序
ConstantExpression _constExp = Expression.Constant("aaa",typeof(string));//一个常量 //Console.Writeline("aaa"); MethodCallExpression _methodCallexp=Expression.Call(typeof(Console).GetMethod("WriteLine",new Type[]{typeof(string)}),_constExp); Expression<Action> consoleLambdaExp = Expression.Lambda<Action>(_methodCallexp); consoleLambdaExp.Compile()(); Console.ReadLine();
下边的MethodCallExpression你也许不知道是什么回事,不要急我下边会详细讲的,这相当于
如下图:
工作中,有各种各样的测试服务器,我们要部署应用,怎么方便秒连远程桌面呢,每次都找 远程桌面->然后再输入服务器ip ?这种方法虽然也可以,终究是慢人一拍,我来告诉你怎么弄。
多线程运行,主线程等待。
private static void Test2() { var waits = new List<EventWaitHandle>(); for (int i = 0; i < 10; i++) { var handler = new ManualResetEvent(false); waits.Add(handler); new Thread(new ParameterizedThreadStart(Print)) { Name = "thread" + i.ToString() }.Start(new Tuple<int, EventWaitHandle>(i, handler)); } WaitHandle.WaitAll(waits.ToArray()); Console.WriteLine("All Completed!"); Console.Read(); } private static void Print(object param) { var p = (Tuple<int, EventWaitHandle>)param; Console.WriteLine(Thread.CurrentThread.Name + ": Begin!"); if (p.Item1 == 2) Thread.Sleep(1200); else if (p.Item1 ==1 ) Thread.Sleep(2000); else Thread.Sleep(1000); Console.WriteLine(Thread.CurrentThread.Name + ": Print" + p.Item1); Console.WriteLine(Thread.CurrentThread.Name + ": End!"); p.Item2.Set(); }