【发布时间】:2015-03-25 15:30:50
【问题描述】:
我面临以下问题。我有一个像这样的 SignalR 集线器:
public class NewsLetterHub : Hub
{
private readonly IServicesContainer _servicesContainer;
private readonly ILifetimeScope _hubLifetimeScope;
public NewsLetterHub(ILifetimeScope lifetimeScope, IServicesContainer servicesContainer)
{
_servicesContainer = servicesContainer;
_hubLifetimeScope = lifetimeScope.BeginLifetimeScope();
_servicesContainer.NewsLetterService.ImportProgress += _sentNewsLetter_Progress;
}
我以这种方式在 Autofac 中注册此集线器:
builder.RegisterHubs(Assembly.GetExecutingAssembly());
调试代码我看到每个请求都会调用一次集线器构造函数,但ImportProgress 事件包含之前注册的处理程序。这会导致_sentNewsLetter_Progress 方法被多次执行。
我尝试以这种方式注册集线器:
builder.RegisterHubs(Assembly.GetExecutingAssembly()).InstancePerLifetimeScope();
这样做似乎可行,但我不知道这是否是正确的解决方案(它变成了单例)。
我也尝试取消注册该活动:
_servicesContainer.NewsLetterService.ImportProgress -= _sentNewsLetter_Progress;
_servicesContainer.NewsLetterService.ImportProgress += _sentNewsLetter_Progress;
但它似乎什么也没做。
如何防止这种行为?
【问题讨论】: