示例代码

项目启动时,创建依赖注入容器

定义一静态容器 IWindsorContainer

private static IWindsorContainer _container;

在 Application_Start() 中,创建该容器

_container = new WindsorContainer();

调用 Container Install 方法,向容器内注册组件

_container.Install(FromAssembly.This());

该语句会调用整个程序集中所有实现了 IWindsorInstaller 接口类中的Install方法以向容器的注册组件。如下列代码:

 public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(
Component.For<IDPlatypusRepository>().ImplementedBy<DPlatypusRepository>().LifestylePerWebRequest());
}

特别列出向 Container 中注册 Controler 的代码:

 public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(Classes.FromThisAssembly()
.BasedOn<ApiController>().LifestylePerWebRequest());
}

定义实现 IDependencyResolver 接口的 WindsorDependencyResolver 类,作为全局 HttpConfiguration 的 Resolver

var dependencyResolver = new WindsorDependencyResolver(_container);
configuration.DependencyResolver = dependencyResolver;

创建一新 IHttpControllerActivator,更改 Controller 创建方式为从容器 Container 中获取

实现 IHttpControllerActivator 接口 Create 方法

 public IHttpController Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType)
{
var controller = (IHttpController)_container.Resolve(controllerType); request.RegisterForDispose(
new Release(() => _container.Release(controller))); return controller;
}

并且注册当 web request 被 Dispose 的时候,Dispose 该 Controller。

替换 Default IHttpControllerActivator 行为

GlobalConfiguration.Configuration.Services.Replace(typeof(IHttpControllerActivator),
new WindsorCompositionRoot(container));

参考资料:

Simplest Possible ASP.NET Web API Project that Implements IoC/DI using Castle Windsor

http://www.codeproject.com/Articles/710662/Simplest-Possible-ASP-NET-Web-API-Project-that-Imp

WebAPI Dependency Injection

https://github.com/ucdavis/UCDArch/wiki/WebAPI-Dependency-Injection

Difference between inheriting ApiController vs. IHttpController

http://stackoverflow.com/questions/21464909/difference-between-inheriting-apicontroller-vs-ihttpcontroller

ASP.NET WEB API 2: HTTP MESSAGE LIFECYLE

http://www.asp.net/posters/web-api/asp.net-web-api-poster.pdf

使用 Castle Windsor 实现 Web API 依赖注入

http://beginor.github.io/2014/12/21/webapi-dependency-injection-with-castle-windsor.html

最新文章

  1. 利息?hii
  2. chrome浏览器定位页面元素对应代码查找资源
  3. 【Mail】JavaMail介绍及发送邮件(一)
  4. Oracle 学习之路开始
  5. os.system和os.popen
  6. Android之开发杂记(一)
  7. SQL中以count及sum为条件的查询
  8. 40条优化php代码的小实例
  9. 关于target is null for setProperty的问题总结
  10. 2015年ACM长春区域赛比赛感悟
  11. 【Python3爬虫】自动查询天气并实现语音播报
  12. 使用Jenkins部署asp.net core
  13. (54)Wangdao.com第七天_JavaScript 运算符
  14. 1.11 UML 类图(多看多用就熟悉了)(节选自:《大话设计模式》)
  15. ambari删除脚本
  16. Linux 如何开启SFTP
  17. modbustcp封装使用获取设备数据示例
  18. 微软企业库Unity学习笔记
  19. codepen &amp; js demos
  20. 在ASP.NET中备份和还原数据库

热门文章

  1. ES6读书笔记(三)
  2. execute immediate
  3. pThread多线程demo
  4. OO第二次单元总结——电梯多线程调度问题
  5. SSM(SpringMVC+Spring+Mybatis)框架学习理解
  6. Mysql 简单的使用定时器调用存储过程
  7. Some cool FireMonkey multi-device components
  8. ubuntu18 安装apache2.4 php5.6 mysql5.6
  9. docker 容器模式下部署mysql 主从复制
  10. django无法加载样式