C# Ninject未通过应用程序启动中的DependencyResolver进行解析
我整个上午都在试图解决这个问题,但似乎是时候征求意见了 我有一个MVC/WebApi/SignalR应用程序。我有一个服务,我想开始与网络应用程序一起。我希望这项服务被注入。这就是我想做的:C# Ninject未通过应用程序启动中的DependencyResolver进行解析,c#,asp.net-web-api,ninject,C#,Asp.net Web Api,Ninject,我整个上午都在试图解决这个问题,但似乎是时候征求意见了 我有一个MVC/WebApi/SignalR应用程序。我有一个服务,我想开始与网络应用程序一起。我希望这项服务被注入。这就是我想做的: public static class NinjectWebCommon { ... private static void RegisterServices(IKernel kernel) { GlobalHost.DependencyResolver = new
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>();
}
}
非常感谢您的帮助。多亏了史蒂夫的评论,我才得以解决这个问题 缺少的部分是在MVC基础结构中注册NinjectDependencyResolver:
private static void RegisterServices(IKernel kernel)
{
DependencyResolver.SetResolver(new NinjectDependencyResolver(kernel));
...
}
执行此操作后,dependencysolver.Current
的实例更改为ninjectdependencysolver
不幸的是,这还没有结束。在尝试调用
DependencyResolver.Current.GetService()
时,我遇到了一个System.EntryPointNotFoundException
。但在的帮助下,这很容易解决。请确保您的DependencyResolver.Current in Application_Start是NinjectDependencyResolver的一个实例。如果不是,请确保在应用程序启动过程中,您的配置在正确的位置/时间。Steve,感谢您的及时回答。DependencyResolver.Current不是NinjectDependencyResolver的实例。至于初始化,我自己不注册解析器。我正在使用一个Ninject.MVC3包,我的印象是这将自动完成(在某处)。我已经检查了NinjectWebCommon类的RegisterServices方法是否在应用程序启动之前被调用。我需要手动执行一些额外的初始化吗?
private static void RegisterServices(IKernel kernel)
{
DependencyResolver.SetResolver(new NinjectDependencyResolver(kernel));
...
}