在MVC4中使用Ninject和SignalR

Nei*_*ski 2 asp.net-mvc ninject asp.net-mvc-4 signalr

我刚刚开始在我们的MVC 4项目中探索SignalR.我想做的其中一件事是将Ninject DI添加到我们的Hub类中.两个问题:

1)我找到并安装了SignalR.Ninject,但是这样做了,我不太清楚我用它做了什么.我尝试将以下行添加到AppStart NinjectWebCommon文件中的RegisterServices()方法,但这会产生编译错误.

private static void RegisterServices(IKernel kernel)
{
    kernel.Load(
        new Repositories.AssetModule()
    );

    GlobalHost.DependencyResolver = new
        SignalR.Ninject.NinjectDependencyResolver(kernel);
}
Run Code Online (Sandbox Code Playgroud)

2)一旦正确配置,我可以使用Hub类的构造函数注入,还是需要使用[Inject]属性的属性注入?

任何方向都会非常感激.

Tob*_*son 7

我也一直在努力解决编译错误:

GlobalHost.DependencyResolver = new
        SignalR.Ninject.NinjectDependencyResolver(kernel);
Run Code Online (Sandbox Code Playgroud)

但是,我设法通过将NinjectDependencyResolver的内容复制到一个新类来解决它:

public class NinjectSignalRDependencyResolver : DefaultDependencyResolver
    {
        private readonly IKernel _kernel;

        public NinjectSignalRDependencyResolver(IKernel kernel) 
        {
            if (kernel == null)
            {
                throw new ArgumentNullException("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));
        }
    }
Run Code Online (Sandbox Code Playgroud)

然后我在NinjectWebCommon类(由SignalR nuget提供)中的RegisterServices方法中设置解析器,如下所示:

private static void RegisterServices(IKernel kernel)
{            
   RouteTable.Routes.MapHubs(new NinjectSignalRDependencyResolver(kernel));
}
Run Code Online (Sandbox Code Playgroud)