ASP.NET Web Api使用Ninject实现依赖注入

10/10/2018 .NETAPI后端

ASP.NET Web Api使用Ninject实现依赖注入在ASP.NET Web Api项目中使用Ninject,新建一个 ASP.NET Web Api 项目使用 Nuget 安装第三方包使用nuget安装 Ninject.Web.WebApi ,安装之后,会在项目中引入NinjectNinj

# ASP.NET Web Api使用Ninject实现依赖注入

ASP.NET Web Api项目中使用Ninject,新建一个 ASP.NET Web Api 项目

# 使用 Nuget 安装第三方包

使用nuget安装 Ninject.Web.WebApi ,安装之后,会在项目中引入

Ninject
Ninject.Web.Common
Ninject.Web.WebApi
1
2
3

还需要安装 Ninject.Web.Common.WebHost,安装成功之后,会在App_Start文件夹中会自动生成一个 Ninject.Web.Common.cs 文件 这个文件是Ninject初始化相关的内容

# 编辑 Ninject.Web.Common.cs

Ninject.Web.Common.cs中遗漏一个重要的特性,在项目中的controller的构造函数中使用依赖注入,不会生效,需要在 CreateKernel()中 添加下面的内容

RegisterServices(kernel);
GlobalConfiguration.Configuration.DependencyResolver = new NinjectDependencyResolver(kernel);
return kernel;
1
2
3

需要引入

using System.Web.Http;
using Ninject.Web.WebApi;
1
2

# 注册相关的服务

如项目中添加了一个服务

IUserService.cs

public interface IUserService
{
    string GetName();
}
1
2
3
4

UserService.cs

public class UserService : IUserService
{
    public string GetName()
    {
        return "Test";
    }
}
1
2
3
4
5
6
7

NinjectWebCommon.cs中的 RegisterServices(...)方法中注册对应的服务

private static void RegisterServices(IKernel kernel)
{
    kernel.Bind<IUserService>().To<UserService>();
}
1
2
3
4

#Controller中使用

public class UserController : ApiController
{
    private IUserService _userService;
    public UserController(IUserService userService)
    {
        _userService = userService;
    }

    public string Get()
    {
        return _userService.GetName();
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13

# 在过滤器中使用依赖注入

public class ParamsFilterAttribute : ActionFilterAttribute
{
    public IUserService userService { get; set; }
    public override void OnActionExecuting(HttpActionContext actionContext)
    {
        base.OnActionExecuting(actionContext);

        userService.GetName();
    }
}
1
2
3
4
5
6
7
8
9
10

Controller中添加过滤器

[ParamsFilter]
public string Get()
{
    return _userService.GetName();
}
1
2
3
4
5

更多精彩内容 (opens new window)