ASP.NET Web API - 使用 Castle Windsor 依赖注入
项目启动时,创建依赖注入容器
定义一静态容器 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
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
最新文章
- 利息?hii
- chrome浏览器定位页面元素对应代码查找资源
- 【Mail】JavaMail介绍及发送邮件(一)
- Oracle 学习之路开始
- os.system和os.popen
- Android之开发杂记(一)
- SQL中以count及sum为条件的查询
- 40条优化php代码的小实例
- 关于target is null for setProperty的问题总结
- 2015年ACM长春区域赛比赛感悟
- 【Python3爬虫】自动查询天气并实现语音播报
- 使用Jenkins部署asp.net core
- (54)Wangdao.com第七天_JavaScript 运算符
- 1.11 UML 类图(多看多用就熟悉了)(节选自:《大话设计模式》)
- ambari删除脚本
- Linux 如何开启SFTP
- modbustcp封装使用获取设备数据示例
- 微软企业库Unity学习笔记
- codepen &; js demos
- 在ASP.NET中备份和还原数据库