• 简单的三层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,选择添加引用,引用的路径 是:

    AspNETWebFormNinjectpackagesNinject.3.0.1.10lib et40Ninject.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);
            }
        }
    }
    复制代码
    复制代码
  • 相关阅读:
    4.2说说计算机中的异常
    1.1组合电路、时序电路在计算机课程中的地位
    EFM32JG系列MCU内部温度传感器使用方法
    +7虚拟内存的作用,通过什么方式提高虚拟内存的性能
    +6存储结构是怎样提高性能的,它和局部性的关系是什么。
    +5性能分析定律
    +4 高速缓存
    +3软件优化至关重要,软件优化一般有哪些方法?
    +2流水线是怎样提高性能的,会遇到什么问题,解决方法是什么
    +1阿姆达尔定律
  • 原文地址:https://www.cnblogs.com/zwb7926/p/3261918.html
Copyright © 2020-2023  润新知