Ninject 无法通过 Application_Start 中的依赖解析器进行解析
本文关键字:依赖 Start Application Ninject | 更新日期: 2023-09-27 18:33:52
我整个上午都在试图解决这个问题,但似乎是时候征求意见了。
我有一个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
变量为空。
根据这篇文章,这种模式应该有效,但它没有。 可能受到 SignalR 依赖项解析器的影响,但我不太确定。
同时,当我在 WebApi 控制器中使用构造函数注入时,注入工作正常。
public class MyController : ApiController
{
private readonly PricingService _pricingService;
public MyController (PricingService pricingService)
{
_pricingService = pricingService;
}
}
任何帮助将不胜感激。
多亏了
史蒂夫的评论,我才能够解决这个问题。
缺少的部分是在MVC基础设施中注册NinjectDependencyResolver:
private static void RegisterServices(IKernel kernel)
{
DependencyResolver.SetResolver(new NinjectDependencyResolver(kernel));
...
}
这样做之后,DependencyResolver.Current
的实例更改为 NinjectDependencyResolver
。
不幸的是,这还不是结束。我在尝试打电话时System.EntryPointNotFoundException
DependencyResolver.Current.GetService<PricingService>()
.但在这次讨论的帮助下,这很容易解决。