Asp.net-Web-Api
如何配置 Web API 2 和結構圖
我瀏覽了多個部落格等,試圖找出如何使用 Web API 2 配置 StructureMap,但沒有一個實現對我有用。混淆似乎是圍繞著 MVC 使用的不同 IDependency Resolver 和 Web API 使用的。
首先,哪個是正確的 Nuget 包,其次,如何使用純 Web API 2 項目配置它?
謝謝
這是我到目前為止所擁有的,它似乎正在工作。它是否正確?
public class StructureMapControllerActivator : IHttpControllerActivator { private readonly IContainer _container; public StructureMapControllerActivator(IContainer container) { if (container == null) throw new ArgumentNullException("container"); _container = container; } public IHttpController Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType) { try { var scopedContainer = _container.GetNestedContainer(); scopedContainer.Inject(typeof(HttpRequestMessage), request); request.RegisterForDispose(scopedContainer); return (IHttpController)scopedContainer.GetInstance(controllerType); } catch (Exception e) { // TODO : Logging throw e; } } }
連結很少,我是否試圖解釋我們如何*(輕鬆)*一起使用 StructureMap 和 Web API:
我們必須實現,這可以從已經配置的StructureMap
IHttpControllerActivator中受益:ObjectFactorypublic class ServiceActivator : IHttpControllerActivator { public ServiceActivator(HttpConfiguration configuration) {} public IHttpController Create(HttpRequestMessage request , HttpControllerDescriptor controllerDescriptor, Type controllerType) { var controller = ObjectFactory.GetInstance(controllerType) as IHttpController; return controller; } }然後,我們只需要註冊我們的實現*(global.asax)*:
protected void Application_Start() { ... HttpConfiguration config = GlobalConfiguration.Configuration; config.Services .Replace(typeof(IHttpControllerActivator), new ServiceActivator(config)); ...