我试图整个上午解决这个问题,但似乎是时候征求意见了。
我有一个MVC / WebApi / SignalR应用程序。我有一项服务,我想与Web应用程序一起开始。我想要注入这项服务。所以这就是我想要做的事情:
public static class NinjectWebCommon
{
...
private static void RegisterServices(IKernel kernel)
{
GlobalHost.DependencyResolver = new Microsoft.AspNet.SignalR.Ninject.NinjectDependencyResolver(kernel);
kernel.Bind<PricingService>().ToSelf().InSingletonScope();
}
}
public class Application : HttpApplication
{
protected void Application_Start()
{
...
PricingService pricingService = DependencyResolver.Current.GetService<PricingService>();
}
}
我的问题是pricingService
变量为空。
根据this post,这种模式应该有效,但事实并非如此。可能是SignalR依赖解析器有影响,但我不太确定。
同时,当我在WebApi控制器中使用构造函数注入时,注入工作正常。
public class MyController : ApiController
{
private readonly PricingService _pricingService;
public MyController (PricingService pricingService)
{
_pricingService = pricingService;
}
}
任何帮助都将受到高度赞赏。
答案 0 :(得分:4)
感谢史蒂夫的评论,我能够解决这个问题。
缺少的部分是在MVC基础设施中注册NinjectDependencyResolver:
private static void RegisterServices(IKernel kernel)
{
DependencyResolver.SetResolver(new NinjectDependencyResolver(kernel));
...
}
执行此操作后,DependencyResolver.Current
的实例已更改为NinjectDependencyResolver
。
不幸的是,这不是结束。我试图致电System.EntryPointNotFoundException
时得到DependencyResolver.Current.GetService<PricingService>()
。但是在this discussion的帮助下很容易解决这个问题。