1. 程式人生 > >Neject 在MVC框架中使用

Neject 在MVC框架中使用

自動 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;

namespace 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); } }
View Code

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框架中使用