zoukankan      html  css  js  c++  java
  • 【.Net】Ninject使用记录

    Ninject的使用

    有三种注入节点,根据个人理解,三种节点注入都可以使用,应该是注入的时机不同
    MVC的三种IoC注入点的Ninject实现

    根据目前使用情况,建议使用NinjectDependencyResolver来注入,ControllerFactory节点注入的话,控制器也会使用注入来实例化,当请求的路径不存在的时候,不能正常的抛出HttpNotFoundException响应404,而是报System.InvalidOperationException,使用NinjectDependencyResolver来注入就省去自己处理的麻烦了。
    注:Asp.Net MVC5的控制器不能设为单例,不像SpringMVC的Servlet,所以感觉管理控制器的注入没有很大的必要。

    MVC5配置如下:

    • 引入Ninject.dll
    • 添加NinjectDependencyResolver.cs或者其他两种
        public class NinjectDependencyResolver : IDependencyResolver
        {
            private IKernel kernel;
    
            public NinjectDependencyResolver()
            {
                kernel = new StandardKernel();    // 有些人的配置有点区别
                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<ISchoolRepository>().To<SchoolRepository>();
    
                // 绑定对应服务
                kernel.Bind<ISchoolService>().To<SchoolService>();
            }
        }
    
    • 修改Global.asax,Application_Start中后面添加:
    DependencyResolver.SetResolver(new NinjectDependencyResolver());
    
    • 在需要的地方为注入属性,添加注入构造函数或者[Inject]特性,属性要求public
        public class AController : Controller
        {
            [Inject]
            public ISchoolService schoolService { get; set; }
    
            // ...
        }
    

    注:

    • 这里引用不需要添加其他的,那些Ninject.Web.Common什么的,只是做了层设置的封装,这里简单就不需要加了
    • 如果出现空引用的情况,先检查属性是否为public,其次AddBindings(){}内是否有注入的类没有绑定的!不一定是报空的类!
    • 每次都需要自己手动添加依赖绑定到AddBindings(),有点麻烦,AutoFac可以自动绑定依赖,就是没有[Inject]这样的特性,需要构造函数注入

    WebApi配置方法

  • 相关阅读:
    第五节13读取配置中的连接字符串 简单
    第五节 8_手机归属地查询案例 简单
    第五节 8登陆练习操作 简单
    第五节 21类型化DataSet 简单
    PHP XML操作类DOMDocument 简单
    第十节 1ASP.Net简介及学习方法 简单
    第五节 8注入漏洞与参数化查询 简单
    在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误............ 简单
    第五节 17DateStr 简单
    第五节 19可空数据类型 简单
  • 原文地址:https://www.cnblogs.com/Locked-J/p/7722864.html
Copyright © 2011-2022 走看看