1

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

当我点击 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>();
        }
    }

为什么不调用解析器?

4

3 回答 3

12

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

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

DependencyResolver.SetResolver(new PoorMansResolver()); 

但是这将其设置为 Web API (System.Web.Http):

GlobalConfiguration.Configuration.DependencyResolver = new PoorMansResolver();
于 2013-05-27T00:17:01.313 回答
1

WebAPi 和 MVC 控制器的依赖解析器位于不同的命名空间中。您必须为这两个解析器实现一个解析器,并将它们分别分配给 mvc 控制器和 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。

于 2014-04-10T23:55:11.383 回答
0

我会关心你如何/如果你正在连接你的 ControllerFactory。请参阅这个 SO 问题。它是关于 Unity 的,但原理是一样的。

于 2013-05-26T22:27:50.247 回答