之前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());
}
}

WebApi中使用Ninject 依赖注入的更多相关文章

  1. 在MVC5中使用Ninject 依赖注入

    各大主流.Net的IOC框架性能测试比较 : http://www.cnblogs.com/liping13599168/archive/2011/07/17/2108734.html 使用NuGet ...

  2. MVC中使用Ninject依赖注入

    在.NET MVC中使用Ninject注入,主要分为以下几步: 使用NuGet包添加Ninject引用,我添加的是目前最新版本3.34 在App_Start文件夹下,创建NinjectControll ...

  3. Ninject依赖注入——构造函数的注入

    1.Ninject简介 Ninject是基于.Net平台的依赖注入框架,它能够将应用程序分离成一个个高内聚.低耦合(loosely-coupled, highly-cohesive)的模块,然后以一种 ...

  4. Ninject依赖注入——构造函数、属性、方法和字段的注入

    Ninject依赖注入——构造函数.属性.方法和字段的注入(三) 1.Ninject简介 Ninject是基于.Net平台的依赖注入框架,它能够将应用程序分离成一个个高内聚.低耦合(loosely-c ...

  5. 为什么多线程、junit 中无法使用spring 依赖注入?

    为什么多线程.junit 中无法使用spring 依赖注入? 这个问题,其实体现了,我们对spring已依赖太深,以至于不想自己写实例了. 那么到底是为什么在多线程和junit单元测试中不能使用依赖注 ...

  6. 深入浅出spring IOC中三种依赖注入方式

    深入浅出spring IOC中三种依赖注入方式 spring的核心思想是IOC和AOP,IOC-控制反转,是一个重要的面向对象编程的法则来消减计算机程序的耦合问题,控制反转一般分为两种类型,依赖注入和 ...

  7. 转:深入浅出spring IOC中四种依赖注入方式

    转:https://blog.csdn.net/u010800201/article/details/72674420 深入浅出spring IOC中四种依赖注入方式 PS:前三种是我转载的,第四种是 ...

  8. 【17MKH】我在框架中对.Net依赖注入的扩展

    说明 依赖注入(DI)是控制反转(IoC)的一种技术实现,它应该算是.Net中最核心,也是最基本的一个功能.但是官方只是实现了基本的功能和扩展方法,而我呢,在自己的框架 https://github. ...

  9. ASP.NET Core中如影随形的”依赖注入”[下]: 历数依赖注入的N种玩法

    在对ASP.NET Core管道中关于依赖注入的两个核心对象(ServiceCollection和ServiceProvider)有了足够的认识之后,我们将关注的目光转移到编程层面.在ASP.NET ...

随机推荐

  1. 【源码安装】Heartbeat3.0.9

    1.概述1.1 关于Heartbeat1.2 本篇博客实践环境2. 部署基础环境2.1 通过YUM安装依赖环境2.2 创建Heartbeat用户和组3. 编译安装3.1下载源码包3.2 编译安装3.2 ...

  2. 使用limit查询的同时取得总的记录数:SQL_CALC_FOUND_ROWS和FOUND_ROWS()

    通常我们都用如下的sql来进行列表 SELECT COUNT(*) FROM users WHERE name LIKE 'a%';SELECT name, email FROM users WHER ...

  3. CISP-PTE注册信息安全专业人员渗透测试工程师知识体系大纲

    CISP-PTE注册信息安全专业人员渗透测试工程师知识体系大纲 都是图.. 不足之处,欢迎补充

  4. Ubuntu 17.10 UTC

    UTC即Universal Time Coordinated,协调世界时(世界统一时间)GMT 即Greenwich Mean Time,格林尼治平时Windows 与 Mac/Linux 看待系统硬 ...

  5. 基于 HTML5 的 WebGL 3D 版俄罗斯方块

    前言 摘要:2D 的俄罗斯方块已经被人玩烂了,突发奇想就做了个 3D 的游戏机,用来玩俄罗斯方块...实现的基本想法是先在 2D 上实现俄罗斯方块小游戏,然后使用 3D 建模功能创建一个 3D 街机模 ...

  6. ArrayList的add(E e)方法与扩容

    ArrayList是Java开发中经常用到的集合类,它是List接口的实现类,具有很高的查询性能,但不是线程安全的.本文主要讲述了ArrayList的add(E e)方法及该方法中涉及到的容量扩容技术 ...

  7. 阿里云ECS安装Cadvisor报错

    阿里云ECS安装Cadvisor报错安装命令: sudo docker run \ --volume=/:/rootfs:ro \ --volume=/var/run:/var/run:ro \ -- ...

  8. ASP.NET Core中实现单体程序的事件发布/订阅

    标题:ASP.NET Core中实现单体程序的事件发布/订阅 作者:Lamond Lu 地址:https://www.cnblogs.com/lwqlun/p/10468058.html 项目源代码: ...

  9. java实现开根号算法

    public static void main(String[] args) { long start = System.currentTimeMillis(); double target=9876 ...

  10. 谈一谈对象池SafeObjectPool能干什么

    前言 首先从ado.net的连接池开始了解,数据库操作通常是 new SqlConnection(). Open(). 使用完后 Close(),整个过程相当耗时,特别是频繁建议套字接连接的过程.ad ...