首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Autofac + SignalR

Autofac + SignalR
EN

Stack Overflow用户
提问于 2012-09-25 21:15:34
回答 2查看 2.7K关注 0票数 4

我对autofac和singalR库都是完全陌生的,所以请不要对我太苛刻!我在bootstrapper中有以下代码,它可以在没有signalR的情况下独立工作。

代码语言:javascript
复制
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));

上面的代码运行得很好,但是在用下面的代码注册我的Hub后,它就不能工作了。

代码语言:javascript
复制
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);

我从这里(https://github.com/pszmyd/SignalR.Autofac)使用SignalR依赖解析器绑定到Autofac。

我有一个像这样的简单集线器,

代码语言:javascript
复制
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‘匹配的作用域。”

无论我做什么,我似乎都不能让它工作,如果有人能告诉我上面的代码出了什么问题,我将不胜感激。

非常感谢狮子座

EN

回答 2

Stack Overflow用户

发布于 2013-09-13 23:24:19

对于托管在IIS中的ASP.NET应用程序,请将以下内容添加到Application_Start:

代码语言:javascript
复制
var container = AutofacConfig.BuildContainer();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
var signalRDependencyResolver = new SignalRAutofacDependencyResolver(container);
// old SignalR 1.0 way - routes.MapHubs(signalRDependencyResolver);
RouteTable.Routes.MapHubs(new HubConfiguration { Resolver = signalRDependencyResolver });

您可能会找到SignalRAutofacDependencyResolver here

注入ISecurity服务的集线器示例:

代码语言:javascript
复制
public class ExampleHub : Hub
{
    private static int _count = 0;

    private readonly ISecurity _security;
    public ExampleHub(ISecurity security)
    {
        _security = security;
    }

    public void GetCount()
    {
        _count++;
        Clients.All.SetCount(_count);         
    }
}

这也适用于SignalR self host release。只需使用如下所示的启动类:

代码语言:javascript
复制
// These are static variables in Program.cs - Probably a better way to do this
_container = AutofacConfig.BuildContainer();
_webServer = WebApp.Start<WebServerStartup>("http://localhost:8080");

public class WebServerStartup
{
    private readonly SignalRAutofacDependencyResolver _signalRDependencyResolver;

    public WebServerStartup()
    {
        _signalRDependencyResolver = new SignalRAutofacDependencyResolver(_container); 
    }

    public void Configuration(IAppBuilder app)
    {
        app.MapSignalR(new HubConfiguration { Resolver = _signalRDependencyResolver });
    }
}
票数 3
EN

Stack Overflow用户

发布于 2012-09-25 21:31:13

设置DependencyResolver后,您是否仍需要将其传递给MapHubs,也就是尝试执行以下操作:

代码语言:javascript
复制
GlobalHost.DependencyResolver = resolver;

RouteTable.Routes.MapHubs();

我知道SignalR,但从来没有使用过Autofac,但关于可能的Autofac问题的详细信息,可能值得看看这些答案:

How to resolve Autofac InstancePerHttpRequest

Autofac, ASP.NET MVC 3 httpRequest scope and AutoMapper: No scope with a Tag matching 'httpRequest' is visible

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12583778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档