我刚刚开始在我们的 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);
}
2) 正确配置后,我可以对 Hub 类使用构造函数注入(inject),还是需要对 [Inject] 属性使用属性注入(inject)?
任何方向将不胜感激。
最佳答案
我也曾为以下编译错误而苦苦挣扎:
GlobalHost.DependencyResolver = new
SignalR.Ninject.NinjectDependencyResolver(kernel);
但是,我设法通过将 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));
}
}
然后我在类 NinjectWebCommon(由 SignalR nuget 提供)的 RegisterServices 方法中设置解析器,如下所示:
private static void RegisterServices(IKernel kernel)
{
RouteTable.Routes.MapHubs(new NinjectSignalRDependencyResolver(kernel));
}
关于asp.net-mvc - 在 MVC4 中将 Ninject 与 SignalR 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13515731/