WebApi中使用Ninject 依赖注入
2018-06-22 07:56:36来源:未知 阅读 ()
之前Ninject依赖注入是在MVC中使用,最近在WebApi中使用,用之前的MVC方式发现使用接口注入,一直是Null错误,网上查询了一些资源,总结一下,以后备用。
主要分为以下几步骤:
- 在NuGet上安装Ninject.MVC ,我安装的是最新版本nuget上安装Ninject.MVC5
- 定义两个类NinjectScope、NinjectResolver,用于实现最新版Web Api要求的IDependencyResolver
- 在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()); } }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- ASP.NET使用Ajax返回Json对象的方法 2020-03-23
- ASP.NET使用AjaxPro实现前端跟后台交互详解 2020-03-19
- .net下log4net使用方法详解 2020-03-19
- ASP.NET实现大文件上传功能 2020-03-08
- 使用asp.net+jquery Jsonp的方法 2020-03-08
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash