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); }
使用方法跟之前一样。