摘自:http://docs.autofac.org/en/latest/integration/signalr.html:
"OWIN集成中的常见错误是使用GlobalHost.在OWIN中,您可以从头开始创建配置.在使用OWIN集成时,不应该在任何地方引用GlobalHost."
这听起来很合理.但是,如何IHubContext通过ApiController解析,就像通常的(非OWIN):
GlobalHost.ConnectionManager.GetHubContext<MyHub>()?
我无法在任何地方找到这个参考,我现在唯一的方法是HubConfiguration在同一个容器中注册实例并执行此操作:
public MyApiController : ApiController {
public HubConfiguration HubConfig { get; set; } // Dependency injected by
// PropertiesAutowired()
public IHubContext MyHubContext {
get {
return HubConfig
.Resolver
.Resolve<IConnectionManager>()
.GetHubContext<MyHub>();
}
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
但是,这对我来说似乎相当冗长.这样做的正确方法是什么?更具体一点,是否有一种干净的注册方式IConnectionManager?
编辑:
我最终做的是:
var container = builder.Build();
hubConfig.Resolver = new AutofacDependencyResolver(container);
app.MapSignalR("/signalr", hubConfig);
var builder2 = new ContainerBuilder();
builder2
.Register(ctx => hubConfig.Resolver.Resolve<IConnectionManager>())
.As<IConnectionManager>();
builder2.Update(container);
Run Code Online (Sandbox Code Playgroud)
但我觉得必须有一种更简单的方法来IConnectionManager注入控制器.
我已经阅读了Apple的"你的第一个iOS应用程序"指南,对我来说,一切都很清楚.但是,当我试图理解XCode中提供的基于视图的iOS应用程序模板如何工作时,我遇到了一些有趣的难题.
我知道应用程序获取主要的nib文件名(通常是MainWindow.xib)形成*-Info.plist文件.我不明白的是,XCode如何知道哪个nib文件与默认情况下使用此基于View的应用程序模板创建的控制器相关联.在本指南中,您将从基于Window的应用程序开始,并且"必须编写"类似于:
MyViewController *aViewController = [[MyViewController alloc]
initWithNibName:@"MyViewController" bundle:[NSBundle mainBundle]];
[self setMyViewController:aViewController];
Run Code Online (Sandbox Code Playgroud)
这很有道理.然而,事实证明,在基于视图的iOS应用程序模板中没有这样的东西,并且首先实际上并不需要这个nib规范,只要您创建了带有选项"With XIB for user interface"的UIViewController子类"检查.我的问题是,XCode如何知道哪个nib与此控制器相关联,即它是将此连接存储在某些文件中,还是通过某种约定(控制器和nib文件的名称可能相同)?此外,'加载来自MyViewBasedAppController''副标题来自于MainWindow.xib中接口构建器的控制器视图?当我手动添加控制器时,它绝对不存在,所以我很好奇XCode在我背后做了什么魔术,当我想我的时候