简单的三层asp.net webForm使用Ninject实现Ioc
简单的三层asp.net webForm使用Ninject实现Ioc
在asp.net webform下使用Ninject的简单过程。
首先建立个项目,如下图,简单三层(PS:UI层要同时引用BLL、Model、DAL这三层)

写好代码
Model:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Model
{
public class UserInfo
{
public int UserID { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
public DateTime LastLoginDate { get; set; }
public int Integral { get; set; } }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Model
{
public class Log
{
public int Id { get; set; }
public int ActionUserId { get; set; }
public string Desription { get; set; }
public DateTime CreateOn { get; set; }
}
}
DAL:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Model;
namespace DAL
{
public interface IUser
{
Model.UserInfo Create(Model.UserInfo user);
void Update(Model.UserInfo user);
Model.UserInfo GetModel(string userName);
Model.UserInfo GetModel(int userId);
void DeleteUser(int uid);
}
public class User : IUser
{
public Model.UserInfo Create(Model.UserInfo user)
{
//do some SQL
return new UserInfo() { UserID=1, UserName="myName", Password="Passowrd", LastLoginDate=DateTime.Now, Integral=0 };
}
public void Update(Model.UserInfo user)
{
//do some SQL
}
public Model.UserInfo GetModel(string userName)
{
//do some SQL
return new UserInfo() { UserID = 1, UserName = "admin", Password = "passowrd", LastLoginDate = DateTime.Now, Integral = 0 };
}
public Model.UserInfo GetModel(int uid)
{
//do some SQL
return new UserInfo() { UserID = uid, UserName = "myName", Password = "Passowrd", LastLoginDate = DateTime.Now, Integral = 0 };
}
public void DeleteUser(int uid)
{
//do some SQL
}
}
}
最后是BLL的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Ninject;
namespace BLL
{
public interface IUser
{
bool Validate(string name, string pwd);
bool Login(string name, string pwd);
}
public class User : IUser
{
[Inject]
public DAL.IUser UserDAL { get; set; }
public bool Validate(string name, string pwd)
{
var isValidate = false;
var model = UserDAL.GetModel(name);
if (model != null)
{
pwd = this.GetEncryptPassword(pwd);
if (model.Password == pwd)
isValidate = true;
}
return isValidate;
}
public bool Login(string name, string pwd)
{
var isValidate = this.Validate(name,pwd);
if (isValidate)
{
var model = UserDAL.GetModel(name);
//更新登录时间和积分
model.LastLoginDate = DateTime.Now;
model.Integral += 5;
UserDAL.Update(model);
//记录获得积分事件
BLL.Log.WriteLog(new Model.Log() { ActionUserId = model.UserID, Desription = "每天登录获得5积分", CreateOn = DateTime.Now });
}
return isValidate;
}
private string GetEncryptPassword(string pwd)
{
//返回加密后的密文
return pwd;
}
}
}
现在,先使用nuGet(如何使用nuGet)在UI层引用组件Ninject和Ninjecet.Web.Common,如下图,绿色的钩子表示已经安装

引用成功后,不用你设置任何配置,然后在自动添加的文件中,添加接口注入:

在文件NinjectWebCommon.cs的方法添加我们进行接口注入:
private static void RegisterServices(IKernel kernel)
{
kernel.Bind<BLL.IUser>().To<BLL.User>();
kernel.Bind<DAL.IUser>().To<DAL.User>();
}
为了在BLL中进行对DAL接口进行注入,也要在BLL中引用Ninect
方法:右击BLL,选择添加引用,引用的路径 是:
AspNETWebFormNinject\packages\Ninject.3.0.1.10\lib\net40\Ninject.dll
这样就可以在BLL中使用Ninject注入了:

最后们在UI层使用登录:
namespace AspNETWebFormNinject
{
public partial class _Default : System.Web.UI.Page
{
[Inject]
public BLL.IUser UserBLl { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnLogin_Click(object sender, EventArgs e)
{
var isValidate = UserBLl.Login(txtUserName.Text, txtPwd.Text);
var msg = isValidate ? "登录成功" : "登录失败";
var script = string.Format("alert('{0}')",msg);
Page.ClientScript.RegisterStartupScript(this.GetType(), "", script, true);
}
}
}
简单的三层asp.net webForm使用Ninject实现Ioc的更多相关文章
- 简单原始的ASP.NET WEBFORM中多文件上传【参考其他资料修改】
首先是ASPX页面中添加file标签 <input onclick="addFile()" type="button" value="增加&qu ...
- 解析ASP.NET WebForm和Mvc开发的区别
因为以前主要是做WebFrom开发,对MVC开发并没有太深入的了解.自从来到创新工场的新团队后,用的技术都是自己以前没有接触过的,比如:MVC 和EF还有就是WCF,压力一直很大.在很多问题都是不清楚 ...
- 解析ASP.NET WebForm和Mvc开发的区别 分类: ASP.NET 2013-12-29 01:59 11738人阅读 评论(5) 收藏
因为以前主要是做WebFrom开发,对MVC开发并没有太深入的了解.自从来到创新工场的新团队后,用的技术都是自己以前没有接触过的,比如:MVC 和EF还有就是WCF,压力一直很大.在很多问题都是不清楚 ...
- ASP.NET MVC与ASP.NET WebForm
ASP.NET MVC是微软公司的一款WEB开发框架,整合了“模型-视图-控制器”架构的高效与整洁,是敏捷开发最现代的思想与技术.它是传统ASP.NET WebForm的一个完善的替代品. 1.当今的 ...
- ASP.Net WebForm温故知新学习笔记:一、aspx与服务器控件探秘
开篇:毫无疑问,ASP.Net WebForm是微软推出的一个跨时代的Web开发模式,它将WinForm开发模式的快捷便利的优点移植到了Web开发上,我们只要学会三步:拖控件→设属性→绑事件,便可以行 ...
- 一、ASP.NET MVC 路由(一)--- ASP.NET WebForm路由模拟
ASP.NET WebForm 应用,用户请求的是物理文件,其中包括静态页面和动态页面,在Url中的显示都是服务器中一个物理文件的相对路径.但是ASP.NET MVC就不同了,用户请求的是Contro ...
- (转)教你记住ASP.NET WebForm页面的生命周期
对于ASP.NET Webform的开发者,理解ASP.NET Webform的页面生命周期是非常重要的.主要是为了搞明白在哪里放置特定的方法和在何时设置各种页面属性.但是记忆和理解页面生命周期里提供 ...
- 【Ext.Net学习笔记】01:在ASP.NET WebForm中使用Ext.Net
Ext.NET是基于跨浏览器的ExtJS库和.NET Framework的一套支持ASP.NET AJAX的开源Web控件,包含有丰富的Ajax运用,其前身是Coolite. 下载地址:http:// ...
- MVC项目实践,在三层架构下实现SportsStore-03,Ninject控制器工厂等
SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...
随机推荐
- ABP领域层——工作单元(Unit Of work)
ABP领域层——工作单元(Unit Of work) 点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之12.ABP领域层——工作单元(Unit Of work) ...
- 详细解释 集成Maven Spring Mybatis项目包生成Bat文件
有时在项目必须Maven项目包生成bat文件,长官一人.本文将解释的具体使用方法maven-assembly-plugin插件实现bat文件包. 1.首先看一下项目结构 2.配置pom.xml文件,在 ...
- HttpGet 请求
import java.net.HttpURLConnection; import java.text.SimpleDateFormat; import java.util.Calendar; imp ...
- sgu 194 被动散热器具有最大流量的上限和下限(最大流量模板dinic加上优化)
模板类型的题详细參考国家集训队论文:http://wenku.baidu.com/view/0f3b691c59eef8c75fbfb35c.html 參考博客:http://blog.csdn.ne ...
- CocoaPods 建立私有仓库
CocoaPods是iOS,Mac下优秀的第三方包管理工具,类似于java的maven,给我们项目管理带来了极大的方便. [个人或公司在开发过程中,会积累很多可以复用的代码包,有些我们不想开源,又想像 ...
- js中从blob提取二进制
文章结构: 一.所遇到的问题 二.解决方法 一. 服务器端通过websocket向浏览器端传输图片(二进制),需要根据不同的图片把图片显示在不同的位置,可行的一个方法是先把图片转化成二进制数组,再把二 ...
- 【百度地图API】建立全国银行位置查询系统(四)——如何利用百度地图的数据生成自己的标注
原文:[百度地图API]建立全国银行位置查询系统(四)--如何利用百度地图的数据生成自己的标注 摘要: 上一章留个悬念,"如果自己没有地理坐标的数据库,应该怎样制作银行的分布地图呢?&quo ...
- 【百度地图API】北京周边7日游——图标按路线轨迹行动
原文:[百度地图API]北京周边7日游--图标按路线轨迹行动 任务描述: 春节就要来啦~酸奶小妹的妈妈要从遥远的重庆,来到北京过春节呢!酸奶小妹忙着给妈妈计划,北京周边的旅游线路.计划好路线后,就开始 ...
- MapReduce 编程模型
一.简单介绍 1.MapReduce 应用广泛的原因之中的一个在于它的易用性.它提供了一个因高度抽象化而变得异常简单的编程模型. 2.从MapReduce 自身的命名特点能够看出,MapReduce ...
- RabbitMQ基本管理(上)
1.1.2 显示RabbitMQ进程 查看RabbitMQ进程信息,输入以下命令: <span style="font-size:18px;"><strong& ...