在asp.net webform下使用Ninject的簡單過程。
首先建立個項目,如下圖,簡單三層(PS:UI層要同時引用BLL、Model、DAL這三層)

寫好代碼
Model:
View Code
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; } } }
View Code
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:
View Code
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的代碼:
View Code
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層使用登錄:
View Code
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); } } }
