我已经设置了一个非常简单的依赖项解析器,但它没有为我的控制器调用。
当我点击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>();
}
}
为什么没有调用旋转变压器?
答案 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但原则是一样的。