1.建立项目:Models/BLL/DAL/IBLL/IDAL/WebSite

2.WebSite要引用其余几个项目

3.NuGet中搜索Ninject,安装 Ninject、Ninject.Web.Common、Ninject.Web 这三个包到WebSite上面。

4.打开WebSite 的App_Start文件夹,会新出现一个 NinjectWebCommon 类,其中有一个函数:private static void RegisterServices(IKernel kernel){}

5.在这个 RegisterServices 函数中就可以注册类的映射了

代码:

     /// <summary>
        /// Load your modules or register your services here!
        /// </summary>
        /// <param name="kernel">The kernel.</param>
        private static void RegisterServices(IKernel kernel)
        {
            kernel.Bind<IBLL.IUserInfo>().To<BLL.UserInfo>();
            kernel.Bind<IDAL.IUserInfo>().To<DAL.UserInfo>();
        }

6.在WebForm中使用的代码:using Ninject;

public partial class _Default : Page
    {
        [Inject]
        public IBLL.IUserInfo UserBLL { get; set; }

        protected void Page_Load(object sender, EventArgs e)
        {
            string name = UserBLL.GetEntity(10).NickName;
            Response.Write(name);
        }
    }

7.在BLL和DAL中也要使用Ninject,需要引用相关DLL,这个DLL会自动在 解决方案的根目录下 的Ninject文件夹里。如果没有,就去WebSite的bin目录找。

添加引用后,使用代码:BLL和DAL的使用方法是一样的。

using System.Data;
using IBLL;
using Ninject;
using System.Collections.Generic;
using System;

namespace BLL
{
    /// <summary>
    /// 用户表
    /// </summary>
    public class UserInfo : IUserInfo
    {
        [Inject]
        public IDAL.IUserInfo UserInfoDAL { get; set; }

        /// <summary>
        /// 得到一个实体
        /// </summary>
        /// <param name="_Id"></param>
        /// <returns></returns>
        public Models.UserInfo GetEntity(int ID)
        {
            return UserInfoDAL.GetEntity(ID);
        }

    }
}

MVC中使用Ninject

引用好相关的dll

新建一个类(我放到网站根目录了)代码:

public class NinjectDependencyResolver : System.Web.Mvc.IDependencyResolver
    {
        private readonly IKernel kernel;
        public NinjectDependencyResolver()
        {
            kernel = new StandardKernel();
            AddBindings();
        }
        private void AddBindings()
        {
            #region 自定义 编写映射
            kernel.Bind<IBLL.IBannerInfo>().To<BLL.BannerInfo>();
            kernel.Bind<IDAL.IBannerInfo>().To<DAL.BannerInfo>();
            #endregion
        }
        public object GetService(Type serviceType)
        {
            return kernel.TryGet(serviceType);
        }
        public IEnumerable<object> GetServices(Type serviceType)
        {
            return kernel.GetAll(serviceType);
        }
    }

Global文件代码新增注册:

protected void Application_Start()
        {
            DependencyResolver.SetResolver(new NinjectDependencyResolver());//注册Ioc容器
            AreaRegistration.RegisterAllAreas();
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
        }

使用方法跟之前一样。

 

分类:

技术点:

相关文章: