在我的NinjectWebCommon.cs
文件中,在CreateKernel
方法下,我正在应用类似的注入
private static IKernel CreateKernel()
{
var kernel = new StandardKernel();
kernel.Bind<Func<IKernel>>().ToMethod(ctx => () => new Bootstrapper().Kernel);
kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>();
RegisterServices(kernel);
// Web API Injection
GlobalConfiguration.Configuration.DependencyResolver = new NinjectDependencyResolver(kernel);
// SignalR Injection
GlobalHost.DependencyResolver = new SignalR.Ninject.NinjectDependencyResolver(kernel);
return kernel;
}
我想这应该为我做,但我在SignalR注入时一直出现错误
"无法将类型"SignalR.Ninject.NinjectDependencyResolver"隐式转换为"Microsoft.AspNet.SignalR.IDdependencyResolver'"
知道问题出在哪里吗?
我不确定你是否找到了答案。从1.0.0版本开始,他们已经改变了DI在SignalR和SignalR.Ninject包中的工作方式。我写了一篇关于这方面的小博客:http://myrandomcodesnippets.wordpress.com/2013/03/29/ninject-dependency-injection-with-signalr-1-0-1/
基本上,你需要创建自己的实现,这与SignalR.Ninject实现相同:
GlobalHost.DependencyResolver = new SignalRNinjectDependencyResolver(kernel);
当您创建新的类时,它将希望从IDependencyResolver继承。不要为此烦恼,请使用:
public class SignalRNinjectDependencyResolver : DefaultDependencyResolver
{
private readonly IKernel _kernel;
public SignalRNinjectDependencyResolver(IKernel kernel)
{
_kernel = kernel;
}
public override object GetService(Type serviceType)
{
return _kernel.TryGet(serviceType) ?? base.GetService(serviceType);
}
public override IEnumerable<object> GetServices(Type serviceType)
{
return _kernel.GetAll(serviceType).Concat(base.GetServices(serviceType));
}
}
希望这能有所帮助。