我对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,一切正常。
我很确定我错过了什么。
有什么想法吗?
答案 0 :(得分:2)
以下文章应该为您提供使用SignalR进行依赖注入所需的信息:
http://www.asp.net/signalr/overview/signalr-20/extensibility/dependency-injection
“SignalR中的简单依赖注入”部分向您展示了“您可以轻松注册一个函数来创建集线器实例,并使用此函数执行DI。”
文章继续表明,您可以更进一步,用您自己的IoC容器(如TinyIoC)替换SignalR的依赖性解析器(尽管本文使用Ninject作为示例)。