Signalr 如何在NancyFx中使用TinyIocContainer注册信号集线器的依赖关系
我对NancyFx和TinyIoc有点陌生,但这里有: 我已经能够在NanxyFx中使用TinyIocContainer的自动注册来在Nancy模块中注入依赖项,这非常整洁,这一切都很好,并且工作正常 但是,如何为下面这样的信号集线器注册依赖项? 我不断地从信号员那里得到经典的错误信息: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
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);
}