Asp.net-Web-Api

如何配置 Web API 2 和結構圖

  • March 8, 2016

我瀏覽了多個部落格等,試圖找出如何使用 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:

我們必須實現,這可以從已經配置的StructureMapIHttpControllerActivator中受益: ObjectFactory

public 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));
   ...

引用自:https://stackoverflow.com/questions/24590552