• 【.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配置方法

  • 相关阅读:
    检查宿舍卫生
    代码优化中 主窗口 问题 解决
    授权 存储
    升级Xcode7&iOS9后,出现NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -980X)
    控制器里面添加控制器
    版本新特性
    ios图片适配问题
    启动图片调整
    luogu_1896【题解】状压DP
    luogu_2602【题解】数位DP 数字计数
  • 原文地址:https://www.cnblogs.com/Locked-J/p/7722864.html
Copyright © 2020-2023  润新知