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 函数中就可以注册类的映射了
代码:
////// Load your modules or register your services here! /// /// The kernel. private static void RegisterServices(IKernel kernel) { kernel.Bind().To (); kernel.Bind ().To (); }
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{ ////// 用户表 /// public class UserInfo : IUserInfo { [Inject] public IDAL.IUserInfo UserInfoDAL { get; set; } ////// 得到一个实体 /// /// ///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().To (); kernel.Bind ().To (); #endregion } public object GetService(Type serviceType) { return kernel.TryGet(serviceType); } public IEnumerable
Global文件代码新增注册:
protected void Application_Start() { DependencyResolver.SetResolver(new NinjectDependencyResolver());//注册Ioc容器 AreaRegistration.RegisterAllAreas(); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); }
使用方法跟之前一样。