如何在NancyFx中使用TinyIocContainer为signalr hub注册依赖项

时间:2014-02-08 14:14:35

标签: signalr ioc-container signalr-hub nancy tinyioc

我对NancyFx和TinyIoc有点新鲜,但是这里有:

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

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

我不断收到来自signalr的经典错误消息:

No parameterless constructor defined for this object.

我的设置:

我有一个SignalR Hub:

[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);
    }
}

我有一个启动课:

 public class Startup{
    var hubConfiguration = new HubConfiguration { EnableDetailedErrors = true};
    app.MapSignalR("/signalr", hubConfiguration);
 }

如果我有一个ChatHub的无参数构造函数并使用差的mans Ioc,一切正常。

我很确定我错过了什么。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

以下文章应该为您提供使用SignalR进行依赖注入所需的信息:

http://www.asp.net/signalr/overview/signalr-20/extensibility/dependency-injection

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

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