ASP.NET Web API - 使用 Castle Windsor 依赖注入
2015-06-13 22:16
1036 查看
示例代码
项目启动时,创建依赖注入容器
定义一静态容器 IWindsorContainer
private static IWindsorContainer _container;
在 Application_Start() 中,创建该容器
_container = new WindsorContainer();
调用 Container Install 方法,向容器内注册组件
_container.Install(FromAssembly.This());
该语句会调用整个程序集中所有实现了 IWindsorInstaller 接口类中的Install方法以向容器的注册组件。如下列代码:
特别列出向 Container 中注册 Controler 的代码:
[b]定义实现 IDependencyResolver 接口的 WindsorDependencyResolver 类,作为全局 HttpConfiguration 的 Resolver[/b]
[b]创建一新 IHttpControllerActivator,更改 Controller 创建方式为从容器 Container 中获取[/b]
实现 IHttpControllerActivator 接口 Create 方法
并且注册当 web request 被 Dispose 的时候,Dispose 该 Controller。
替换 Default IHttpControllerActivator 行为
[b]参考资料:[/b]
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
项目启动时,创建依赖注入容器
定义一静态容器 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()); }
[b]定义实现 IDependencyResolver 接口的 WindsorDependencyResolver 类,作为全局 HttpConfiguration 的 Resolver[/b]
var dependencyResolver = new WindsorDependencyResolver(_container); configuration.DependencyResolver = dependencyResolver;
[b]创建一新 IHttpControllerActivator,更改 Controller 创建方式为从容器 Container 中获取[/b]
实现 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));
[b]参考资料:[/b]
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
相关文章推荐
- asp.net模板引擎Razor调用外部方法用法实例
- asp.net模板引擎Razor中cacheName的问题分析
- asp.net实现在非MVC中使用Razor模板引擎的方法
- ASP.NET中ServerPush用法实例分析
- ASP.NET中Global和URLReWrite用法
- ASP.NET中Application全局对象用法实例浅析
- RaspberryPi+SAE+Wechat打造智能家居篇(三)
- ASP.NET中母版页和shtml实例入门
- 【ASP.NET】——SQL注入
- asp.net sql 分页,,优化 排序 及分页,
- 基于ASP.net的教学平台/在线学习平台
- Asp.net MVC4 + signalR 聊天室实现
- aspose.cell制作excel常见写法
- ASP.NET中母版页和shtml实例入门
- ASP.NET中Application全局对象用法实例浅析
- ASP.NET中Global和URLReWrite用法
- ASP.NET中ServerPush用法实例分析
- asp.net实现在非MVC中使用Razor模板引擎的方法
- asp.net模板引擎Razor中cacheName的问题分析
- asp.net模板引擎Razor调用外部方法用法实例