在 web api 和 mvc 之间共享 Ioc 和会话

Sharing Ioc and session between web api and mvc

我正在将 Web api 2 添加到现有的 MVC 5 应用程序。

我们正在使用 Unity 和 NHibernate 会话。要求。 我们基于 DefaultControllerFactory 创建了一个 UnityControllerFactory。 UnityControllerFactory 在 Application_Start 中设置如下:

_controllerFactory = new UnityControllerFactory(_container); ControllerBuilder.Current.SetControllerFactory(_controllerFactory);

这不适用于网络 api,猜测我们需要基于接口 IDependencyResolver.

实现统一解析器

有没有办法让 ApiController 和 Controller 使用同一个容器?

是的,我之前用 Autofac 和 Ninject 做过类似的事情,不确定 Unity 的实际语法是什么,但您需要在 Application_Start :

var container = new UnityContainer();
RegisterDependencies(container);

// Wire unity container with ASP.NET MVC
ControllerBuilder.Current.SetControllerFactory(new UnityControllerFactory(container));

// Wire unity container with Web Api
httpConfig.DependencyResolver = new UnityResolver(container);