• Ninject在.NET WebForm和MVC中的使用


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

    使用方法跟之前一样。

  • 相关阅读:
    python 希尔排序
    python 选择排序
    python 插入排序
    怎么根据返回数量,来渲染点赞星星的个数变高量?
    avalon $computed不起作用?
    移动端点击事件兼容问题,在pc端可以点,在手机上不可以点
    移动端弹出遮罩层禁止页面滚动,遮罩里面的框允许滚动如何实现。
    移动端,如何禁止弹窗下面内容滚动/页面滚动
    avalon数据已更新,视图未更新的bug修复
    Python 导入分部分项前的 数据处理
  • 原文地址:https://www.cnblogs.com/xsj1989/p/6800862.html
Copyright © 2020-2023  润新知