ASP.NET Web API和WCF都体现了REST软件架构风格。在REST中,把一切数据视为资源,所以也是一种面向资源的架构风格。所有的资源都可以通过URI来唯一标识,通过对资源的HTTP操作(GET/HEAD、POST、PUT和DELETE),使资源的表征状态发生了改变,即Representational State Transfer,缩写为REST。
WCF从3.5以来,也体现了REST的架构风格,但对于一般的消息通信来说,显得"过重",所以,微软推出ASP.NET Web API,提供一种"轻量级"的服务,并且借鉴了MVC,以Controller的形式来定义服务,而Controller中的Action方法对应着不同的HTTP操作。
本篇为"在三层架构下实现SportsStore"系列的第九篇,包括:
■ 11、ASP.NET MVC调用ASP.NET Web API的增删改查服务
□ 11.1 调用查询服务
※ 11.1.1 创建ASP.NET Web API项目 引入Ninject
※ 11.1.2 提供ASP.NET WEB API增删改查服务
※ 11.1.3 ASP.NET MVC调用ASP.NET WEB API查询服务
11、ASP.NET MVC调用ASP.NET Web API提供增删改查服务
11.1 调用查询服务
System; using System.Collections.Generic; using System.Web.Http.Dependencies; using Ninject; namespace MySportsStore.WebApi.Extension { public class NinjectDependencyResolver : IDependencyResolver { private List<IDisposable> disposableServices = new List<IDisposable>(); public IKernel Kernel { get; private set; } public NinjectDependencyResolver(NinjectDependencyResolver parent) { this.Kernel = parent.Kernel; } public NinjectDependencyResolver() { this.Kernel = new StandardKernel(); } public void Register<TFrom, TTO>() where TTO : TFrom { this.Kernel.Bind<TFrom>().To<TTO>(); } public IDependencyScope BeginScope() { return new NinjectDependencyResolver(this); } public object GetService(System.Type serviceType) { return this.Kernel.TryGet(serviceType); } public System.Collections.Generic.IEnumerable<object> GetServices(System.Type serviceType) { foreach (var service in this.Kernel.GetAll(serviceType)) { this.AddDisposableService(service); yield return service; } } public void Dispose() { foreach (IDisposable disposable in disposableServices) { disposable.Dispose(); } } private void AddDisposableService(object service) { IDisposable disposable = service as IDisposable; if (null != disposable && !disposableServices.Contains(disposable)) { disposableServices.Add(disposable); } } } }