我對autofac和singalR庫都是全新的,所以請對我輕鬆點!我在bootstrapper中有下面的代碼,它在沒有signalR的情況下自行工作。Autofac + SignalR
var builder = new ContainerBuilder();
builder.RegisterControllers(Assembly.GetExecutingAssembly());
builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly()).AsImplementedInterfaces();
builder.RegisterType<DatabaseFactory>().As<IDatabaseFactory>().InstancePerHttpRequest();
builder.RegisterType<UnitOfWork>().As<IUnitOfWork>().InstancePerHttpRequest();
builder.RegisterAssemblyTypes(typeof(adminRepository).Assembly).Where(t => t.Name.EndsWith("Repository")).AsImplementedInterfaces().InstancePerHttpRequest();
builder.RegisterAssemblyTypes(typeof(adminService).Assembly).Where(t => t.Name.EndsWith("Service")).AsImplementedInterfaces().InstancePerHttpRequest();
builder.RegisterFilterProvider();
IContainer container = builder.Build();
DependencyResolver.SetResolver(new Autofac.Integration.Mvc.AutofacDependencyResolver(container));
上面的代碼工作得很好,但註冊我的集線器後,下面的代碼,它只是不起作用。
builder.RegisterType<Chat>().InstancePerLifetimeScope();
builder.RegisterFilterProvider();
IContainer container = builder.Build();
DependencyResolver.SetResolver(new Autofac.Integration.Mvc.AutofacDependencyResolver(container));
SignalR.IDependencyResolver resolver = new SignalR.Autofac.AutofacDependencyResolver(container);
GlobalHost.DependencyResolver = resolver;
RouteTable.Routes.MapHubs(resolver);
我使用SignalR依賴解析器從這個結合Autofac(https://github.com/pszmyd/SignalR.Autofac)。
我有一個簡單的樞紐這樣,
public class Chat : Hub
{
private readonly IadminService adminService;
public Chat(IadminService adminService)
{
this.adminService = adminService;
}
public void Send(string message)
{
Clients.addMessage(message);
}
}
這是當我試圖用DI到輪轂上,我得到了錯誤。
「沒有範圍與標籤匹配的'httpRequest'從請求實例的範圍中可見。」
不管我做什麼,我似乎都無法使它工作,如果有人能告訴我上面的代碼有什麼問題,我將不勝感激。
非常感謝 利奧
Btw - 您正在運行哪個版本的SignalR?明天我會詳細研究你的代碼,但我很確定這裏有些事情不對。請更正粘貼的代碼 - 第一個框中的最後一行似乎成爲孤兒:) –
感謝您的回覆。我正在使用SignalR版本0.5.3,如果我將InstancePerHttpRequest更改爲InstancePerLifetimeScope,那麼很不幸,我不能再向數據庫添加新記錄(使用EF作爲數據層)。任何幫助將不勝感激,謝謝! – Leo