丹尼大叔

数学专业毕业,爱上编程的大叔,兴趣广泛。使用博客园这个平台分享我工作和业余的学习内容,以编程交友。有朋自远方来,不亦乐乎。

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

2016年11月8日

摘要: 可以使用不同的模式向消费者类注入依赖项,向构造器里注入依赖项是期中一种。有一些遵循的模式用来注册依赖项,同时有一些需要避免的模式,因为他们经常导致不合乎需要的结果。这篇文章讲述那些跟Ninject功能相关的模式和反模式。然而,全面的介绍可以在Mark Seemann的书《Dependency Injection in .NET》中找到。 阅读全文
posted @ 2016-11-08 21:52 丹尼大叔 阅读(1877) 评论(0) 推荐(0) 编辑

2016年11月7日

摘要: 在小的应用系统中一个一个注册一些服务类型不怎么困难。但是,如果是一个实际的有上百个服务的应用程序呢?约定配置允许我们使用约定绑定一组服务,而不用一个一个分别绑定。 阅读全文
posted @ 2016-11-07 22:03 丹尼大叔 阅读(901) 评论(0) 推荐(1) 编辑

2016年9月28日

摘要: 使用XML配置,需要添加Ninject XML扩展的引用。下一步是添加一个或多个包含类型注册的XML文件。记得这些文件应该跟应用程序一起发布。因此不要忘记将XML文件的属性设置成“Copy if newer”。 阅读全文
posted @ 2016-09-28 21:24 丹尼大叔 阅读(1355) 评论(0) 推荐(0) 编辑

2016年9月26日

摘要: 随着应用程序的增长,注册的服务列表跟着变长,管理这个列表将变得困难。Ninject模块是一个好的将我们的类型绑定分离到不同的绑定组的方式,它很容易地将分组组织到不同的文件中。将一个类变成一个Ninject模块只需要将这个类继承INinjectModule接口。每次创建一个Module的时候都需要实现这个接口,需要实现三个方法和两个属性。创建一个抽象类实现这个接口,之后每次创建Ninject模块的时候都继承这个抽象类,这是一个好主意。好消息是Ninject已经有一个这样的抽象类,名称是NinjectModule。 阅读全文
posted @ 2016-09-26 20:26 丹尼大叔 阅读(1176) 评论(0) 推荐(0) 编辑

2016年8月7日

摘要: DI容器的一个责任是管理他创建的对象的生命周期。他应该决定什么时候创建一个给定类型的对象,什么时候使用已经存在的对象。他还需要在对象不需要的时候处理对象。Ninject在不同的情况下管理对象的生命周期提供了强大的支持。在我们定义一个绑定的时候,定义创建对象的范围。在那个范围内,对象将被重用,每次绑定只存在一次。注意,对象不允许依赖于生命周期短自己小的对象。 阅读全文
posted @ 2016-08-07 14:20 丹尼大叔 阅读(1956) 评论(0) 推荐(3) 编辑

2016年8月4日

摘要: 这篇文章介绍怎样将Ninject添加到实际的项目中,使用Ninject框架最基本的功能。首先用一个Hello World例子介绍怎么添加和使用Ninject。然后用一个更复杂的例子,介绍Ninject绑定是怎样管理依赖的。 阅读全文
posted @ 2016-08-04 21:43 丹尼大叔 阅读(1888) 评论(0) 推荐(3) 编辑

2016年8月2日

摘要: DI(IoC)是当前软件架构设计中比较时髦的技术。DI(IoC)可以使代码耦合性更低,更容易维护,更容易测试。现在有很多开源的控制反转的框架,Ninject是期中一个轻量级开源的.net DI(IoC)框架。目前已经非常成熟,已经在很多项目中使用。这篇文章讲DI概念以及使用它的优势。使用一个简单的例子,重构这个例子让他逐步符合DI设计原则。 阅读全文
posted @ 2016-08-02 14:57 丹尼大叔 阅读(2422) 评论(4) 推荐(8) 编辑

2016年7月27日

摘要: 上一篇文章介绍了Fluent NHibernate基础知识。但是,Fluent NHibernate提供了一种更方便的Mapping方法称为Auto Mapping。只需在代码中定义一些Convention继承类,针对具体的属性、主键、关系、组件指定Mapping的规则,在实体类里定义简单的POCO对象就可以完成整个数据库的自动映射。Auto Mapping适合全新的系统开发,即是在系统设计时还没有数据库,有点像Microsoft Entity Framework的Code First或是Model First的开发方式。 阅读全文
posted @ 2016-07-27 22:01 丹尼大叔 阅读(876) 评论(0) 推荐(0) 编辑

2016年7月24日

摘要: 从这一节起,介绍NHibernate Mapping的内容。前面文章都是使用的NHibernate XML Mapping。NHibernate XML Mapping是NHibernate最早最成熟的Mapping方法。其他的Mapping方法都是基于XML Mapping的思想进行的“变种”,要么暂时不能完全像XML Mapping那样功能丰富。其他的Mapping方法目前包括:Fluent Mapping、Attribute Mapping和Mapping by Conventions。他们各自都有优缺点。使用者应该根据实际情况选择适合自己项目的Mapping方式。 阅读全文
posted @ 2016-07-24 16:28 丹尼大叔 阅读(2446) 评论(4) 推荐(5) 编辑

2016年7月23日

摘要: 这一篇文章介绍在NHibernate 3.2里引入的Query Over查询,Query Over查询跟Criteria查询类似。首先创建IQueryOver对象,然后通过调用该对象的API函数,进行对象查询。还是使用Query Over重写之前所有的查询。 阅读全文
posted @ 2016-07-23 21:33 丹尼大叔 阅读(1961) 评论(0) 推荐(0) 编辑

摘要: NHibernate从3.0开始支持Linq查询。写NHibernate Linq查询就跟写.net linq代码一样,非常灵活,可以很容易实现复杂的查询。这篇文章使用NHibernate Linq重写之前所有的查询。 阅读全文
posted @ 2016-07-23 21:32 丹尼大叔 阅读(1751) 评论(5) 推荐(0) 编辑

2016年7月22日

摘要: 上一篇文章介绍了NHibernate HQL,他的缺点是不能够在编译时发现问题。如果数据库表结构有改动引起了实体关系映射的类有改动,要同时修改这些HQL字符串。这篇文章介绍NHibernate面向对象的Criteria查询。他提供了很多API接口,可以实现“私人订制”式的面向对象查询。 阅读全文
posted @ 2016-07-22 23:58 丹尼大叔 阅读(1075) 评论(0) 推荐(0) 编辑

摘要: NHibernate提供了多种查询方式,最早的HQL语言查询、Criteria查询和SQL Query,到NHibernate 3.0的Linq NHibernate,NHIbernate 4.0又添加了Query Over。每种方式各有优缺点,任何一个SQL查询可以使用任何查询方式查询。根据程序员每种方式掌握的情况,可以使用不同的查询方式。本篇文章介绍HQL语言查询。HQL(Hibernate Query Language)是NHibernate特有的面向对象查询语言,他具有继承、多态的特点。很像原生SQL,但是稍有区别。 阅读全文
posted @ 2016-07-22 23:56 丹尼大叔 阅读(721) 评论(0) 推荐(0) 编辑

摘要: NHibernate的延迟加载机制是很重要的内容。通过关系映射将数据库表之间的关系映射成对象之间的关系,如果没有延迟加载机制,从主表的一个对象的查询将直接查询出所有与该对象关联的其他对象,如果关联的对象上还有其他的关联对象,还要去查询其他的对象。如果这张“网”非常大,或者关联的数据库记录非常多的话,每次查询主表记录都要把整个数据库都查询一遍,这样效率会非常低下。为了解决这个问题产生了NHibernate延迟加载。对一些属性设置延迟加载,只在对象访问到这些属性的时候才去查询数据库,很大程度上提高了系统性能。 阅读全文
posted @ 2016-07-22 23:55 丹尼大叔 阅读(623) 评论(0) 推荐(0) 编辑

摘要: NHibernate一对一关系虽然不经常碰到,但是在对于数据库结构优化的时候,经常会碰到一对一关系。比如,产品详细信息比较多的时候,可以把产品详细信息放到另一张表里面,Product主表只记录产品主要信息。这样能够显著提高产品的查询效率。 阅读全文
posted @ 2016-07-22 23:54 丹尼大叔 阅读(518) 评论(4) 推荐(0) 编辑

摘要: 第一章:NHibernate基础 NHibernate介绍 第一个NHibernate工程 简单的增删改查询 运行时监控 NHibernate配置 数据类型映射 Get/Load方法 NHibernate批量更新 NHibernate事务 NHibernate组件 使用程序集管理NHibernate 阅读全文
posted @ 2016-07-22 15:44 丹尼大叔 阅读(1158) 评论(1) 推荐(5) 编辑

2016年7月17日

摘要: NHibernate在很早的时候就提供了SQL Query(原生SQL查询),对于很复杂的查询,如果使用其他的查询方式实现比较困难的时候,一般使用SQL Query。使用SQL Query是基于原生的SQL语句,查询后将结果做投影到NHibernate实体类对象的过程。也可以投影到其他任何.net集合类。 阅读全文
posted @ 2016-07-17 11:53 丹尼大叔 阅读(4034) 评论(0) 推荐(1) 编辑

2016年7月10日

摘要: NHibernate的多对多关系映射由many-to-many定义 阅读全文
posted @ 2016-07-10 13:31 丹尼大叔 阅读(631) 评论(0) 推荐(0) 编辑

2016年7月9日

摘要: 这篇文章介绍NHibernate最实用的内容:关系映射。NHibernate的关系映射方式有三种:Set:无序对象集合,集合中每一个元素不能重复。List:有序对象集合,集合中的元素可以重复。Bag:无序对象集合,集合中的元素可以重复。Map:键值对集合,相当于Hashtable或Dictionary。这篇文章以一对多关系为例,介绍怎样在NHibernate中建立一对多关系映射。一对多关系是在现实项目中最经常碰到的一种关系。后面文章介绍多对多关系。 阅读全文
posted @ 2016-07-09 22:11 丹尼大叔 阅读(979) 评论(0) 推荐(1) 编辑

摘要: NHibernate的Session的管理涉及到NHibernate的两个最重要的对象ISessionFactory和ISession。ISessionFactory的生成非常消耗资源,通常都在应用程序启动的时候生成,并使用单例模式,被应用程序的所有线程共享。ISession的生成虽然没有ISessionFactory那么消耗资源,但是Session中保存了一级缓存池,如果每次使用到ISession的时候都生成新的ISession对象,而且这样的操作频率很大的时候,也会一定程度上大量消耗内存资源。NHibernate提供CurrentSessionContext对象,将ISession与当前应用的上下文环境进行绑定,先生成ISession,并与CurrentSessionContext绑定,后面直接从CurrentSessionContext中取ISession,可以显著提高执行效率。 阅读全文
posted @ 2016-07-09 16:08 丹尼大叔 阅读(1283) 评论(0) 推荐(0) 编辑