WebApi中使用Ninject 依赖注入

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

   主要分为以下几步骤:

  1.  在NuGet上安装Ninject.MVC ,我安装的是最新版本nuget上安装Ninject.MVC5
  2.  定义两个类NinjectScope、NinjectResolver,用于实现最新版Web Api要求的IDependencyResolver
  3.    在Global中添加如下代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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、在使用的地方,按照如下调用即可

    

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
   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);
         
        }
}

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
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());
        }
    }
复制代码

 

posted @   低调码农哥!  阅读(677)  评论(1编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示