zoukankan      html  css  js  c++  java
  • WebApi中使用Ninject 依赖注入

       之前Ninject依赖注入是在MVC中使用,最近在WebApi中使用,用之前的MVC方式发现使用接口注入,一直是Null错误,网上查询了一些资源,总结一下,以后备用。

       主要分为以下几步骤:

    1.  在NuGet上安装Ninject.MVC ,我安装的是最新版本nuget上安装Ninject.MVC5
    2.  定义两个类NinjectScope、NinjectResolver,用于实现最新版Web Api要求的IDependencyResolver
    3.    在Global中添加如下代码
     protected void Application_Start()
            {
           
                //设置ApiController注入
                GlobalConfiguration.Configuration.DependencyResolver = new  NinjectResolver(CreateKernel());
    
                AreaRegistration.RegisterAllAreas();
                GlobalConfiguration.Configure(WebApiConfig.Register);
                FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
                RouteConfig.RegisterRoutes(RouteTable.Routes);
                BundleConfig.RegisterBundles(BundleTable.Bundles);
            }
          /// <summary>
            /// 接口映射
            /// </summary>
            /// <returns></returns>
            public IKernel CreateKernel()
            {
                var Kernel = new StandardKernel();
                Kernel.Bind<IUser>().To<User>();
            
                return Kernel;
            }    
    

       4、在使用的地方,按照如下调用即可

        

       public class StudentController : ApiController
        {
    
    
            [Ninject.Inject]
            public IResource resource { get; set; }
            [Ninject.Inject]
            public IUser user { get; set; }
    
    
            [HttpPost]
            [AllowAnonymous]
            public object Login([FromBody] UserModel model)
            {
                var model = user.GetLogin(model.UserCode, EncryptPwd, sysRole);
            
            }
    }
    

      

     public class NinjectScope: IDependencyScope
        {
                        protected IResolutionRoot
                 resolutionRoot;
    
                        public NinjectScope(IResolutionRoot
                 kernel)
                        {
                            resolutionRoot
                 = kernel;
                        }
    
                        public object GetService(Type
                 serviceType)
                        {
                            IRequest
                 request = resolutionRoot.CreateRequest(serviceType, null,
                new Parameter[0],
                true,
                true);
                            return resolutionRoot.Resolve(request).SingleOrDefault();
                        }
    
                        public IEnumerable<object>
                 GetServices(Type serviceType)
                        {
                            IRequest
                 request = resolutionRoot.CreateRequest(serviceType, null,
                new Parameter[0],
                true,
                true);
                            return resolutionRoot.Resolve(request).ToList();
                        }
    
                        public void Dispose()
                        {
                            IDisposable
                 disposable = (IDisposable)resolutionRoot;
                            if (disposable
                 != null)
                                disposable.Dispose();
                            resolutionRoot
                 = null;
                        }
        }
    

      

     public class NinjectResolver
       : NinjectScope, IDependencyResolver
        {
            private IKernel
             _kernel;
            public NinjectResolver(IKernel
             kernel)
            :
            base(kernel)
            {
                _kernel
                 = kernel;
            }
            public IDependencyScope
             BeginScope()
            {
                return new NinjectScope(_kernel.BeginBlock());
            }
        }
  • 相关阅读:
    细节决定成败
    关于结构体大小一篇很详细的文章
    Mysql Innodb cluster集群搭建
    Oracle:imp导入dmp文件
    alert弹出窗口,点击确认后关闭页面
    CAS总结之Ticket篇
    web.xml文件的作用
    单点登陆(SSO)
    session和cookie的区别
    oracle问题之数据库恢复(三)
  • 原文地址:https://www.cnblogs.com/personblog/p/8435414.html
Copyright © 2011-2022 走看看