1

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

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

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

我不断收到来自信号器的经典错误消息:

No parameterless constructor defined for this object.

我的设置:

我有一个 SignalR 集线器:

[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,那么一切正常。

我很确定我错过了一些东西。

有任何想法吗?

4

1 回答 1

2

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

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

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

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

于 2014-02-09T03:23:12.483 回答