Neject 在MVC框架中使用
阿新 • • 發佈:2017-11-10
自動 sys dbi lis price clas size fill hide
Neject 開始是用3.3.0.0,不能自動生成NinjectWebCommon文件,測試了很久發現,是版本的問題 ,後來用Nuget卸載後,重新下了Ninject,Ninject.Web.Common,Ninject.Web.Mvc這三個程序集,都是選擇3.2.0.0版本的,然後進行測試,加一個類庫,裏面放接口,實現類,以及實體類
1.創建接口
using ADT.Entities; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;View Codenamespace ADT.Abstract { public interface IProduct { /// <summary> /// 根據主鍵id獲取一個實體 /// </summary> /// <param name="id"></param> /// <returns></returns> ProductBean GetModelById(int id); /// <summary> /// 獲取所有數據,返回List集合/// </summary> /// <returns></returns> List<ProductBean> GetAllList(); bool AddOrEdit(ProductBean model); /// <summary> /// 根據主鍵id改變ValID值 /// </summary> bool UpdateValIDById(long id, bool valid); } }
2.創建實現類
using ADT.Abstract; using ADT.Entities; using CYQ.Data; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ADT.Concrete { public class Product : IProduct { /// <summary> /// 對商品的添加和編輯 /// </summary> /// <param name="model"></param> /// <returns></returns> public bool AddOrEdit(ProductBean model) { bool result = false; using (MAction act = new MAction("Product")) { act.Set("ProductName", model.ProductName); act.Set("ProdutPrice", model.ProdutPrice); act.Set("ValidTime", model.ValidTime); act.Set("Valid", model.Valid); act.Set("Coin", model.Coin); if (model.Id > 0) { result = act.Update("Id=" + model.Id); } else { result = act.Insert(); } } return result; } /// <summary> /// 獲取全部產品信息 /// </summary> /// <returns></returns> public List<ProductBean> GetAllList() { List<ProductBean> list = new List<ProductBean>(); using (MAction act = new MAction("Product")) { list = act.Select().ToList<ProductBean>(); } return list; } /// <summary> /// 根據主鍵id獲取一個實體信息 /// </summary> /// <param name="id"></param> /// <returns></returns> public ProductBean GetModelById(int id) { ProductBean model = null; using (MAction act = new MAction("Product")) { if (act.Fill(id)) { model = act.Data.ToEntity<ProductBean>(); } } return model; } /// <summary> /// 根據主鍵id改變ValID值 /// </summary> /// <param name="id"></param> /// <returns></returns> public bool UpdateValIDById(long id, bool valid) { bool result = false; using (MProc proc = new MProc("update Product set Valid=@valid where ID=@id")) { proc.Set("valid", valid); proc.Set("id", id); int num = proc.ExeNonQuery(); if (num > 0) { result = true; } } return result; } } }View Code
3.創建實體
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ADT.Entities { public class ProductBean { /// <summary> /// 主鍵 /// </summary> public Int64 Id { get; set; } /// <summary> /// 產品名稱 /// </summary> public string ProductName { get; set; } /// <summary> /// 產品價格 /// </summary> public Decimal ProdutPrice { get; set; } /// <summary> /// 無期限的為0, 3個月為3,6個月為6, 12個月為12 /// </summary> public int ValidTime { get; set; } /// <summary> /// 是否有效 /// </summary> public bool Valid { get; set; } /// <summary> /// 產品虛擬幣 /// </summary> public Int64 Coin { get; set; } } }View Code
4.在web.config配置下連接字符串
<add name="conn" connectionString="server=.;database=xx;uid=sa;pwd=xxxx;Max Pool Size=512;Min Pool Size=5;Connect Timeout=600;" />
5.我用的是ORM框架是CYQ,Data,這邊需要引用一個CYQ.Data的程序集,用作和數據庫交互的
新增一個NinjectDependencyResolver.cs的文件,實現IDependencyResolver,貼上代碼如下:
using ADT.Abstract; using ADT.Concrete; using Ninject; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace WebApplication4 { public class NinjectDependencyResolver : IDependencyResolver { private IKernel kernel; public NinjectDependencyResolver(IKernel kernelParam) { kernel = kernelParam; AddBindings(); } public object GetService(Type serviceType) { return kernel.TryGet(serviceType); } public IEnumerable<object> GetServices(Type serviceType) { return kernel.GetAll(serviceType); } private void AddBindings() { kernel.Bind<IProduct>().To<Product>(); } } }View Code
接下來新鍵一個控制器,測試下依賴註入有沒有成功
using ADT.Abstract; using ADT.Entities; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace WebApplication4.Controllers { public class DefaultController : Controller { private IProduct productRepository; public DefaultController(IProduct productRepository) { this.productRepository = productRepository; } // GET: Default public ActionResult Index() { List<ProductBean> list = productRepository.GetAllList(); ViewBag.count = list; return View(); } } }View Code
這樣下來,Neject在MVC5中的使用已經介紹完畢了。
Neject 在MVC框架中使用