How do I get StructureMap working with an AngularJs / MVC5 and WebApi2 web project

前端 未结 1 915
独厮守ぢ
独厮守ぢ 2020-12-15 00:32

So I have an AngularJs/MVC project with normal Controllers and decided to move more to an SPA app and add WebApi2 to pass data back to my UI instead of using MVC.

I

相关标签:
1条回答
  • 2020-12-15 00:44

    This is happening because dependency resolution isn't working for the WebApi controller. StructureMap isn't finding the constructor and can't resolve the IThingRepository.

    WebApi and MVC work differently and have slightly different dependency resolution mechanics. The Global.asax code "DependencyResolver.SetResolver" works for MVC but not for WebAPi. So how do we get this working?

    1. Install the nuget package StructureMap.MVC5 which has the plumbing to make this work.

      Install-Package StructureMap.MVC5

    2. Create a new StructureMapDependencyResolver Class that works for both MVC and WebApi

      public class StructureMapDependencyResolver : StructureMapDependencyScope, IDependencyResolver
      {
          public StructureMapDependencyResolver(IContainer container) : base(container)
          {
          }
          public IDependencyScope BeginScope()
          {
               IContainer child = this.Container.GetNestedContainer();
               return new StructureMapDependencyResolver(child);
          }
      }
      
    3. Update the Global.asax code:

      //StructureMap Container
      IContainer container = IoC.Initialize();
      
      //Register for MVC
      DependencyResolver.SetResolver(new StructureMapDependencyResolver(container));
      
      //Register for Web API
      GlobalConfiguration.Configuration.DependencyResolver = new StructureMapDependencyResolver(container);
      

    For a full explanation of what is happening check this blog post on ASP.NET MVC 4, Web API and StructureMap

    0 讨论(0)
提交回复
热议问题