asp.net-mvc - 在 MVC4 中将 Ninject 与 SignalR 结合使用

标签 asp.net-mvc asp.net-mvc-4 ninject 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);
}

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/

相关文章:

.net - Ninject 中的 "scope"、 "context"等有什么区别?

dependency-injection - 将值注入(inject)到注入(inject)的依赖项中

asp.net-mvc - 当我使用 Web API 从匿名类返回数据时,我应该使用什么返回类型?

asp.net-mvc - 您会使用 MVC 2 还是 MVC 1? - S#arp Architectur + Spark View 引擎

c# - 在 asp.net mvc 中创建动态页面

asp.net-mvc-4 - 最小和最大字符串长度的单独错误消息 - MVC4 数据注释

html - 使用 HTML 5 Player 和 Asp.net MVC4 在 Azure 上流式传输视频

c# - .NET Core 2.2 DI 容器中的上下文绑定(bind)?

asp.net-mvc - ASP.NET MVC Razor 串联

jQuery 'POST' 在 ASP.NET Web API beta 中被视为 'GET'