我对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