zoukankan      html  css  js  c++  java
  • asp.net mvc 控制器的依赖注入(使用Ninject)

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using System.Web.Optimization;
    using System.Web.Routing;
    using Ninject.Injection;
    using Ninject;
    using WebApplication1.Models;
    
    namespace WebApplication1
    {
        public class MvcApplication : System.Web.HttpApplication
        {
            protected void Application_Start()
            {
                AreaRegistration.RegisterAllAreas();
                FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
                RouteConfig.RegisterRoutes(RouteTable.Routes);
                BundleConfig.RegisterBundles(BundleTable.Bundles);
    
                //控制器注入有3种方式
                /*
                 1.通过默认的Controller
                    //NinJectControllerFactory nc = new NinJectControllerFactory();
                    //nc.Register<IPersonRepertory, PersonRepertory>();
                    //ControllerBuilder.Current.SetControllerFactory(nc);
                 2.通过自定义ControllerActivator
                    NinJectActivator na = new NinJectActivator();
                    na.Register<IPersonRepertory, PersonRepertory>();
                    ControllerBuilder.Current.SetControllerFactory(new DefaultControllerFactory(na));
                 3.通过自定义IDepencyResolever
                    NinJectDepencyResolever nj = new NinJectDepencyResolever();
                    nj.Register<IPersonRepertory, PersonRepertory>();
                    DependencyResolver.SetResolver(nj);
                 */
            }
        }
    
    
        public class NinJectControllerFactory : DefaultControllerFactory
        {
            public IKernel Kernel { get; set; }
            public NinJectControllerFactory()
            {
                this.Kernel = new StandardKernel();
            }
    
            protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
            {
                return (IController)this.Kernel.TryGet(controllerType);
            }
            public void Register<TForm, TTo>() where TTo : TForm
            {
                this.Kernel.Bind<TForm>().To<TTo>();
            }
        }
        public class NinJectActivator : IControllerActivator
        {
            public IKernel Kernel { get; set; }
            public NinJectActivator()
            {
                this.Kernel = new StandardKernel();
            }
            public void Register<TForm, TTo>() where TTo : TForm
            {
                this.Kernel.Bind<TForm>().To<TTo>();
            }
            public IController Create(RequestContext requestContext, Type controllerType)
            {
                return (IController)this.Kernel.TryGet(controllerType);
            }
        }
    
    
        public class NinJectDepencyResolever : IDependencyResolver
        {
            private IKernel kernel;
            public NinJectDepencyResolever()
            {
                kernel = new StandardKernel();
            }
            public object GetService(Type serviceType)
            {
               return kernel.TryGet(serviceType);
            }
            public IEnumerable<object> GetServices(Type serviceType)
            {
              return  kernel.GetAll(serviceType);
            }
            public void Register<TForm, TTo>() where TTo : TForm
            {
                this.kernel.Bind<TForm>().To<TTo>();
            }
        }
        //public class Temp : IControllerActivator
        //{
        //    public IController Create(RequestContext requestContext, Type controllerType)
        //    {
        //        return null;
        //    }
        //}
    }

     

     

    Hold on, everything is possible.
  • 相关阅读:
    从程序员到项目经理(13):如何管理自己的时间(下)
    从程序员到项目经理(11):每个人都是管理者
    从程序员到项目经理(15):项目管理三大目标
    程序员:伤不起的三十岁
    从程序员到项目经理(9):程序员加油站 再牛也要合群
    从程序员到项目经理(7):程序员加油站 完美主义也是一种错
    从程序员到项目经理(4):外行可以领导内行吗
    ArcGIS API For Android离线地图的实现
    ArcGIS for Android地图控件的5大常见操作
    从程序员到项目经理(16):原来一切问题都是可以解决的
  • 原文地址:https://www.cnblogs.com/student-note/p/7904663.html
Copyright © 2011-2022 走看看