创建了基本的mvc结构之后(注意添加的是api控制器),需要添加的东西。
我知道的一共有两种(应该还有其他的)基于IoC的HttpControllerActivator和基于IoC的DependencyResolver。我试了基于IoC的DependencyResolver。
1、首先在api项目中nuget一个unity包
2、在api项目中添加UnityResolver类,该类继承了IDependencyResolver接口
以下是一个使用Unity容器对IDependencyResolver的实现
public class UnityResolver : IDependencyResolver { protected IUnityContainer container; public UnityResolver(IUnityContainer container) { if (container == null) { throw new ArgumentNullException("container"); } this.container = container; } public object GetService(Type serviceType) { try { return container.Resolve(serviceType); } catch (ResolutionFailedException) { return null; } } public IEnumerable<object> GetServices(Type serviceType) { try { return container.ResolveAll(serviceType); } catch (ResolutionFailedException) { return new List<object>(); } } public IDependencyScope BeginScope() { var child = container.CreateChildContainer(); return new UnityResolver(child); } public void Dispose() { container.Dispose(); } }
3、配置依赖解析
在全局的HTTPConfiguration对象中DependencyResolver属性上设置依赖解析器,以下的代码使用Untiy注册IProductRepository接口并创建一个UnityResolver,修改App_Start/WebApiCofig.cs中的Register方法
public static class WebApiConfig { public static void Register(HttpConfiguration config) { var container = new UnityContainer(); container.RegisterType<IProductRepository, ProductRepository>(); config.DependencyResolver = new UnityResolver(container); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); } }
另一种方法的网址:https://www.cnblogs.com/artech/p/ioc-4-asp-net-web-api.html