posts - 609,  comments - 13,  views - 64万
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

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

使用方法跟之前一样。

 

posted on   邢帅杰  阅读(259)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示