Web api不是调用我的依赖解析器

时间:2013-05-26 21:48:18

标签: asp.net-web-api

我已经设置了一个非常简单的依赖项解析器,但它没有为我的控制器调用。

当我点击HomeController时,调用GetService :( http:localhost:xxxx /)但是(http://localhost:xxxx/api/Customers)它不是。

在Global.asax中我已经放入了Application_Start

        DependencyResolver.SetResolver(new PoorMansResolver());

我的解析器类是

  public class PoorMansResolver : IDependencyResolver
    {
        static readonly ICustomerRepository CustomerRepository = new CustomerRepository();

        public object GetService(Type serviceType)
        {
            if (serviceType == typeof (CustomersController)) 
                return new CustomersController(CustomerRepository);
            else return null;
        }

        public IEnumerable<object> GetServices(Type serviceType)
        {
            return new List<object>();
        }
    }

为什么没有调用旋转变压器?

3 个答案:

答案 0 :(得分:12)

您是否为MVC4和WebAPI设置了解析器?

这将其设置为mvc(System.Web.Mvc):

DependencyResolver.SetResolver(new PoorMansResolver()); 

但是这为Web API(System.Web.Http)设置了它:

GlobalConfiguration.Configuration.DependencyResolver = new PoorMansResolver();

答案 1 :(得分:1)

WebAPi和MVC控制器的依赖项解析器位于不同的命名空间中。您必须为两个解析器实现一个解析器,并将它们分别分配给min控制器和web api控制器,如下面的ninjectwebcommon.cs文件中所示

    private static IKernel CreateKernel()
    {
        var kernel = new StandardKernel();
        kernel.Bind<Func<IKernel>>().ToMethod(ctx => () => new Bootstrapper().Kernel);
        kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>();

        RegisterServices(kernel);

        DependencyResolver.SetResolver(new NinjectDependencyResolver());
        GlobalConfiguration.Configuration.DependencyResolver = new NinjectResolver(kernel);
        return kernel;
    }

NinjectDependencyResolver为MVC控制器实现System.Web.Mvc.IDependencyResolver,而NinjectResolver为WebApi控制器实现System.Web.Http.Dependencies.IDependencyResolver。

答案 2 :(得分:0)

我会关心你如何/如何连接你的ControllerFactory。见this SO question。这是关于Unity但原则是一样的。