如何使用StructureMap v2.6解析signalR v2.0
在Global.asax的Application_Start中,我有以下内容
ObjectFactory.Initialize(cfg => { cfg.For().Singleton().Add (); });
我的Hub接口是
public interface IDashboardHub { void Initialize(); }
我的中心如下:
public class DashboardHub : Hub, IDashboardHub { private readonly ICpeAccountService _accountService; public DashboardHub(ICpeAccountService service) { _accountService = service; } [Authorize] public void Initialize() { Clients.All.UpdateStatus("Hello World!!!"); } }
如果我删除注入的构造函数和解析器,那么我得到“Hello World”信号,JavaScript显示值。 如果我只是删除解析器,那么signalR不再找到无参数构造函数,并且不会调用Initialize方法。
如果我包含StructureMap依赖项解析器(它正在工作并立即注入大约40个其他类),那么我得到以下exception消息
StructureMap configuration failures: Error: 104 Source: Registry: StructureMap.Configuration.DSL.Registry, StructureMap, Version=2.6.4.0, Culture=neutral, PublicKeyToken=e60ad81abae3c223 Type Instance '87da3c00-4deb-4334-b189-021d445d95ec' (Configured Instance of App.DependencyResolution.StructureMapDependencyResolver, App, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null) Cannot be plugged into type Microsoft.AspNet.SignalR.IDependencyResolver, Microsoft.AspNet.SignalR.Core, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
此外,如果我尝试在startup.cs中解决所有问题,如下所示:
public void Configuration(IAppBuilder app) { ObjectFactory.Initialize(cfg => { cfg.For() .Singleton() .Add(); }); app.MapSignalR(); }
我也得到了同样的错误。
有没有人能够解决这个问题?
最简单的方法是使用HubActivator
启动时你需要的只是cs
public void Configuration(IAppBuilder app) { app.MapSignalR(); }
为您的集线器创建一个Activator
public class HubActivator : IHubActivator { private readonly IContainer container; public HubActivator(IContainer container) { this.container = container; } public IHub Create(HubDescriptor descriptor) { return (IHub)container.GetInstance(descriptor.HubType); } }
确保在app_start中注册此激活器
IContainer container = StructureMap.Container(); // Register a Hub Activator for SignalR GlobalHost.DependencyResolver.Register(typeof(IHubActivator), () => new HubActivator(container));
然后删除任何SignalRDependencyResolver代码,因为它不需要…
- 为什么我不能声明已经声明的同名变量,但新变量超出了其他变量的范围
- COMException(0x800401E3):具有计划任务的操作不可用(来自HRESULT的exception:0x800401E3(MK_E_UNAVAILABLE))
- 捕获WebAPI方法调用的响应大小(以字节为单位)
- 表单validation失败时,将错过查询字符串参数
- 在mvc4中的Global.asax中的会话超时重定向
- ASP.NET MVC4和Web API身份validation+授权(Windows 8和Web)
- Localhost上的ASP.NET MVC Microsoft Live帐户身份validation
- 仅具有表单ID的Html.BeginForm()未生成正确的操作URL
- 错误:项目上未安装EntityFramework包
- MVC4:使用电子邮件作为参数进行URL路由
- Castle Windsor ASP.NET MVC 4和Web API相同的应用程序。 只有MVC控制器没有依赖关系?