推荐:近期的几个ASP.NET开发经验总结和收集一:页面中Page_Load事件 和 Page.IsPostBack执行两次的原因.
原因一:
当<%@Page....中没有AutoEventWireup定义时会导致Page_Load执行两次,如果有定义,且值为true时,在IsPostBack中动态
实现工厂
下面使用两个辅助类,实现数据访问层工厂和业务逻辑层工厂。
using System; using NGuestBook.IDAL;
namespace NGuestBook.Factory { /**//// <summary> /// 数据访问层工厂,用于获取相应的数据访问层对象 /// 使用Abstract Factory设计模式 Facace设计模式 反射机制 缓存机制设计 /// </summary> public sealed class DALFactory { /**//// <summary> /// 获取管理员数据访问层对象 /// </summary> /// <returns>管理员数据访问层对象</returns> public static IAdminDAL CreateAdminDAL() { return (IAdminDAL)DependencyInjector.GetDALObject("AdminDAL"); }
/**//// <summary> /// 获取留言数据访问层对象 /// </summary> /// <returns>留言数据访问层对象</returns> public static IMessageDAL CreateMessageDAL() { return (IMessageDAL)DependencyInjector.GetDALObject("MessageDAL"); }
/**//// <summary> /// 获取评论数据访问层对象 /// </summary> /// <returns>评论数据访问层对象</returns> public static ICommentDAL CreateCommentDAL() { return (ICommentDAL)DependencyInjector.GetDALObject("CommentDAL"); } } }
|
using System; using NGuestBook.IBLL;
namespace NGuestBook.Factory { /**//// <summary> /// 业务逻辑层工厂,用于获取相应的业务逻辑层对象 /// 使用Abstract Factory设计模式 Facace设计模式 反射机制 缓存机制设计 /// </summary> public sealed class BLLFactory { /**//// <summary> /// 获取管理员业务逻辑层对象 /// </summary> /// <returns>管理员业务逻辑层对象</returns> public static IAdminBLL CreateAdminBLL() { return (IAdminBLL)DependencyInjector.GetBLLObject("AdminBLL"); }
/**//// <summary> /// 获取留言业务逻辑层对象 /// </summary> /// <returns>留言业务逻辑层对象</returns> public static IMessageBLL CreateMessageBLL() { return (IMessageBLL)DependencyInjector.GetBLLObject("MessageBLL"); }
/**//// <summary> /// 获取评论业务逻辑层对象 /// </summary> /// <returns>评论业务逻辑层对象</returns> public static ICommentBLL CreateCommentBLL() { return (ICommentBLL)DependencyInjector.GetBLLObject("CommentBLL"); } } }
|
分享:.NET平台依赖注入机制及IoC的设计与实现我们设计的分层架构,层与层之间应该是松散耦合的。因为是单向单一调用,所以,这里的“松散耦合”实际是指上层类不能具体依赖于下层类,而应该依赖于下层提供的一个接口。这样,上层