Signalr 如何在NancyFx中使用TinyIocContainer注册信号集线器的依赖关系

Signalr 如何在NancyFx中使用TinyIocContainer注册信号集线器的依赖关系,signalr,ioc-container,signalr-hub,nancy,tinyioc,Signalr,Ioc Container,Signalr Hub,Nancy,Tinyioc,我对NancyFx和TinyIoc有点陌生,但这里有: 我已经能够在NanxyFx中使用TinyIocContainer的自动注册来在Nancy模块中注入依赖项,这非常整洁,这一切都很好,并且工作正常 但是,如何为下面这样的信号集线器注册依赖项? 我不断地从信号员那里得到经典的错误信息: No parameterless constructor defined for this object. 我的设置: 我有一个信号中心: [Hubname("chathub")] public class

我对NancyFx和TinyIoc有点陌生,但这里有:

我已经能够在NanxyFx中使用TinyIocContainer的自动注册来在Nancy模块中注入依赖项,这非常整洁,这一切都很好,并且工作正常

但是,如何为下面这样的信号集线器注册依赖项?

我不断地从信号员那里得到经典的错误信息:

No parameterless constructor defined for this object.
我的设置:

我有一个信号中心:

[Hubname("chathub")]
public class ChatHub: Hub {

    private IChat _chat;

    public ChatHub(Chat chat){
      _chat = chat;
    }

}
这是我的依赖:

public class Chat: IChat{

    public Chat(IHubConnectionContext clients, IChatRepo repo){
       ...
    }
}
我创建了一个CustomBootstrapper类:

public class CustomBootstrapper : DefaultNancyBootstrapper
{
    protected override void ApplicationStartup(TinyIoCContainer container, Nancy.Bootstrapper.IPipelines pipelines)
    {
        base.ApplicationStartup(container, pipelines);
        // I'm hoping the registration below will resolve for the IHubConnectionContext parameter for the Chat class
        container.Register(GlobalHost.ConnectionManager.GetHubContext<ChatHub>().Clients);
    }
}
如果我有一个用于聊天中心的无参数构造函数,并且使用穷人的Ioc,那么一切都可以正常工作

我很确定我错过了什么


有什么想法吗?

下面的文章应该为您提供在Signal中使用依赖项注入所需的信息:

“信号器中的简单依赖项注入”部分向您展示了如何“轻松注册一个函数来创建集线器实例,并使用此函数来执行DI”


本文继续向您展示,您可以更进一步,用自己的IoC容器(如TinyIoC)替换Signal的依赖项解析器(尽管本文使用Ninject作为示例)。

感谢您的文章。-我刚刚创建了一个自定义的DependencyResolver,但我不能完全确定是否设置了该解析器。e、 g.在本文中,它通过HUB配置设置客户解析器。在Nancy中,我有一个CustomBootstrapper,它继承了ApplicationStartup重载上的DefaultNancyBootstrapper和我,我是否通过如下方式在那里设置解析器:GlobalHost.DependencyResolver=new TinyIoCDependencyResolver(容器)??我两个都试过了,但都没用。我不确定是不是为了简洁起见遗漏了它,但是你的启动类没有
配置(IAppBuilder app)
方法,正如上面链接的文章所示。不确定是否仍涉及堆栈Owin,但在我的MVC5应用程序中还有以下汇编指令:
[assembly:OwinStartup(typeof(Namespace.Of.Startup))]
 public class Startup{
    var hubConfiguration = new HubConfiguration { EnableDetailedErrors = true};
    app.MapSignalR("/signalr", hubConfiguration);
 }