簡單的三層asp.net webForm使用Ninject實現Ioc


 

在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);
        }
    }
}

 

 整個DEMO  下載


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM