mvc下粗略使用Ninject

此文章参考点击打开链接,当然,很详细;


1:首先添加引用程序集 using Ninject;

2:创建一个公共类,实现基本业务方法

         //创建一个继承自DefaultControllerFactory类的自定义Controller工厂类并重写其中的一些方法。
    public class NinjectControllerFactory : DefaultControllerFactory
        
  
    {
        private IKernel ninjectKernel;//申明Ninject核心


        public NinjectControllerFactory()//构造函数
        {
            ninjectKernel = new StandardKernel();//Ninject核心

           ninjectKernel.Settings.InjectNonPublic = true;//属性注入,默认情况下只支持public的,添加此处代码可以支持Private
            #region 属性注入
            //  [Ninject.Inject]
            //public IMessageProvider MessageProvider { set; get; }
            #endregion
            AddBindings();
        }


        protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
        {
            return controllerType == null ? null : (IController)ninjectKernel.Get(controllerType);
        }


        private void AddBindings()
        {
            // todo:后面再来添加绑定


            ninjectKernel.Bind<IBookRepository>().To<BooksRepository>();
            //第一个参数表示实现业务的接口,第二个表示实现改接口的类


           // 上面代码中的 ninjectKernel.Get(controllerType) 可获取到一个Controller实例。在这里如果手动实例化Controller类是一个非常复杂的过程,我们不知道Controller类有没有带参数的构造函数,也不知道构造函数的参数是什么类型。而使用Ninject只需要使用上面的一个Get方法就可以,Ninject内部会自动处理所有的依赖关系,智能地创建我们需要的对象。


// Controller工厂类创建好后,我们就需要告诉MVC用我们的NinjectControllerFactory类来创建Controller对象,为此,需在Global.asax文件的Application_Start方法中添加方法,后面会说到


        }


    }


3:创建一个类,此类包含定义的接口和实现方法:


    //定义业务接口
    public interface IBookRepository {
        IQueryable<Books> books { get; }
        bool AddBooks(Books books);
     


    }
    //继承接口,实现方法
    public class BooksRepository:IBookRepository
    {
        public List<Books> list=new List<Books> ();//此处必须初始化,否者会报错


        public IQueryable<Books> books {
            get {
                return GetBooks().AsQueryable();
            }
        }


        public static List<Books> GetBooks() {
            List<Books> list = new List<Books> { 
           new Books { ID = 1, Title = "ASP.NET MVC 4 编程", Price = 52},
            new Books { ID = 2, Title = "CLR Via C#", Price = 46},
            new Books{ ID = 3, Title = "平凡的世界", Price = 37}
            };
            return list;
        }


        public bool AddBooks(Books books) {


            if (books!=null)
            {
                list.Add(books);
                return true;
            }
            return false;
        }
}

    

4:接着,我们在配置文件中注册Ninject

           //添加工厂容器,注册Ninject,
            //注:此处需要导入文件所在的文件夹空间using TeNinject.Infrastructure;
            ControllerBuilder.Current.SetControllerFactory(new NinjectControllerFactory());

5:申明实体类

   public class Books
    {


        public int ID { get; set; }
        public string Title { get; set; }
     
        public decimal Price { get; set; }
  
    }


6:基本工作已经做好了,现在新建控制器实现

 using TeNinject.Infrastructure;//此处为cs文件所在的文件夹

  private IBookRepository _IBookRepository;//申明公共接口类
        public HomeController(IBookRepository IBookRepository1)//构造函数
        {
            _IBookRepository = IBookRepository1;
        }


     //查询
        public ActionResult Index()
        {
            return View(_IBookRepository.books);
        }


        //添加方法
        public ActionResult AddBooks(Books books) {
             List<Books> list=new List<Books> ();
           
             if ( _IBookRepository.AddBooks(books))
             {
                 list.Add(books);
                 return Json(list, JsonRequestBehavior.AllowGet);
             }
             else
             {
                 return View("Index");
             }
         
        
        }

视图页面和展示数据方法一样,我就不多写了;


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值