Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 信号器2.0与Ninject的接口注入_.net_Dependency Injection_Ninject_Signalr - Fatal编程技术网

.net 信号器2.0与Ninject的接口注入

.net 信号器2.0与Ninject的接口注入,.net,dependency-injection,ninject,signalr,.net,Dependency Injection,Ninject,Signalr,我有以下简单的Hub类来列出使用注入用户服务的用户。使用NinjectSignalerDependencyResolver的启动类。非常简单的客户端脚本 中心 startup.cs NinjectSignalerDependencyResolver 如何配置SignalR 2.0和Ninject以允许集线器具有依赖注入构造函数参数?实现这一点的最简单方法是完全摆脱自定义依赖解析程序,只需使用非常简单的IHubActivator即可 startup.cs Hubactivator.cs 注册服务

我有以下简单的Hub类来列出使用注入用户服务的用户。使用NinjectSignalerDependencyResolver的启动类。非常简单的客户端脚本

中心 startup.cs NinjectSignalerDependencyResolver
如何配置SignalR 2.0和Ninject以允许集线器具有依赖注入构造函数参数?

实现这一点的最简单方法是完全摆脱自定义依赖解析程序,只需使用非常简单的IHubActivator即可

startup.cs Hubactivator.cs 注册服务
私有静态无效注册服务(IKernel内核)
{
GlobalHost.DependencyResolver.Register(typeof(IHubActivator),()=>新的HubActivator(内核));
kernel.Bind().To().InSingletonScope();
...
}

就这么简单-一切正常,接口都像你期望的那样被注入到构造函数中…

这可能会有所帮助:感谢linkl-但我已经在使用相同的依赖项解析程序和技术。你是如何初始化/设置解析程序的?您正在执行类似于
GlobalHost.dependencysolver=newninjectsignalderdependencysolver(内核)的操作?我试着把它放在app.mapsignator(config)行的前后;但这也没什么区别time@Code唯一的一点是,您需要在startup.cs的Start方法中为IUserService创建绑定。下面的链接可能会帮助您:非常棒的答案,但是,我无法使用
GetInstance
。也许库已经更新了,但是我能够使用
return(IHub)container.GetService(descriptor.HubType)
来解决我的中心依赖关系。谢谢
[HubName("dashboardHub")]
public class DashboardHub : Hub
{
    private readonly IUserService _users;

    public DashboardHub(IUserService users)
    {
        _users = users;
    }

    public void Initialize()
    {
        var users = _users.ListUsers();

        Clients.All.UpdateStatus(users);
    }
}
  var kernel = new StandardKernel();
  var resolver = new NinjectSignalRDependencyResolver(kernel);

  var config = new HubConfiguration()
  {
        Resolver = resolver,
  };

  app.MapSignalR(config);
public class NinjectSignalRDependencyResolver : DefaultDependencyResolver
{
    private readonly IKernel _kernel;

    public NinjectSignalRDependencyResolver(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));
    }
}
<script>
    $(function () {
        var dashboard = $.connection.dashboardHub;

        dashboard.client.updateStatus = function (users) {
            var elem= $('.userList');

            elem.html('');
            $.each(users, function (i, user) {
                parent.append("<p>" user.Name +  "<p>");
            });
        };

        $.connection.hub.start().done(function () {
            dashboard.server.initialize();
        });
    });
</script>
private static void RegisterServices(IKernel kernel)
{
    kernel.Bind<IUserService >().To<UserService>().InSingletonScope();

    ...
}
public DashboardHub()
{
}
public void Configuration(IAppBuilder app)
{
    app.MapSignalR();
}
public class HubActivator : IHubActivator
{
    private readonly IKernel container;

    public HubActivator(IKernel container)
    {
        this.container = container;
    }

    public IHub Create(HubDescriptor descriptor)
    {
        return (IHub)container.GetInstance(descriptor.HubType);
    }
}
private static void RegisterServices(IKernel kernel)
{
    GlobalHost.DependencyResolver.Register(typeof(IHubActivator), () => new HubActivator(kernel));    

    kernel.Bind<IUserService >().To<UserService>().InSingletonScope();

    ...
}