SignalR的Ninject依赖注入

本文关键字:注入 依赖 Ninject SignalR | 更新日期: 2023-09-27 17:57:48

在我的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'"

知道问题出在哪里吗?

SignalR的Ninject依赖注入

我不确定你是否找到了答案。从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));
    }
}

希望这能有所帮助。