SignalR

SignalR集成需要 Autofac.SignalR NuGet 包。

SignalR 集成提供SignalR 集线器的依赖集成。由于 SignalR 是内部构件,所以不支持SignalR每请求的生命周期依赖。

这个文档主要是关于Autofac的,你有兴趣可以点击这里: 微软关于SignalR和依赖注入.

  • 快速开始
  • 注册集线器
  • 设置依赖处理器
  • 管理依赖生命周期
  • OWIN 集成

快速开始

要使用 Autofac 集成 SignalR 你得引用SignalR集成的 NuGet 包,然后注册集线器,并设置依赖处理器。

protected void Application_Start()
{var builder = new ContainerBuilder(); // 注册SignalR 集线器. builder.RegisterHubs(Assembly.GetExecutingAssembly()); // 将依赖处理器设置成Autofac. var container = builder.Build(); GlobalHost.DependencyResolver = new AutofacDependencyResolver(container); } 

下一节关于这些功能的细节,以及如何使用它们。

注册集线器

程序启动时同时建立 Autofac 容器,你需要注册 SignalR 集线器及其依赖。通常是在OWIN startup 类或 Global.asax中的 Application_Start 中进行。

var builder = new ContainerBuilder(); // 扫描程序集一次性加载... builder.RegisterHubs(Assembly.GetExecutingAssembly()); // ...手动单个注册. builder.RegisterType<ChatHub>().ExternallyOwned(); 

如果你注册单个的集线器,确保是作为 ExternallyOwned()来注册的。这是为让SignalR来控制集线的销毁而不是Autofac。

设置依赖处理器

将建好的容器传给 AutofacDependencyResolver 类的实例。将新处理器赋给 GlobalHost.DependencyResolver (OWIN的话是HubConfiguration.Resolver ) 让SignalR 使用AutofacDependencyResolver来定位服务。下边是IDependencyResolver 接口Autofac的实现。

var container = builder.Build(); GlobalHost.DependencyResolver = new AutofacDependencyResolver(container); 

管理依赖生命周期

考虑到不支持每请求的依赖, 所有要处理的SignalR的依赖均来于根容器。

  • 如果你有 IDisposable 的组件,它们在应用程序的生命周期里一直存活原于Autofac 会 承载它们直到边界或容器销毁。 你必须将这些注册为 ExternallyOwned()。
  • 任何组件注册为InstancePerLifetimeScope() 都是单例的。假设只有一个生命周期范围,你只能获取一个实例。

为了使您的集线器依赖生命周期更容易管理,您可以将根生命周期范围注入到集线器的构造函数中。下一步,创建一个子生命期范围,您可以在您的集线器调用的持续时间内使用,并解决所需的服务。最后,确保SignalR销毁集线器的时候销毁子生命期。(这类似于服务定位,但这是获得“每个集线器”范围的唯一方法。不,这不是很棒。)

public class MyHub : Hub
{ private readonly ILifetimeScope _hubLifetimeScope; private readonly ILogger _logger; public MyHub(ILifetimeScope lifetimeScope) { // Create a lifetime scope for the hub. _hubLifetimeScope = lifetimeScope.BeginLifetimeScope(); // Resolve dependencies from the hub lifetime scope. _logger = _hubLifetimeScope.Resolve<ILogger>(); } public void Send(string message) { // You can use your dependency field here! _logger.Write("Received message: " + message); Clients.All.addMessage(message); } protected override void Dispose(bool disposing) { // Dipose the hub lifetime scope when the hub is disposed. if (disposing && _hubLifetimeScope != null) { _hubLifetimeScope.Dispose(); } base.Dispose(disposing); } } 

如果这是你程序里的常规模式,你可以考虑创建基/抽象集线器,让其它集线器继承以节省范围内的复制/粘贴,创建/销毁的步骤。

向集线器中注入生命周期范围并不会产生每请求的范围。 仅仅给你一个管理依赖生命周期的方法,比在根容器中处理一切来得更有效的方法。使用InstancePerRequest,甚至在工作区,也是会失败的。更多信息见: the FAQ on per-request scope 。

OWIN 集成

如果 SignalR 作为OWIN应用的一部分来用,你需要:

  • 完成所有标准SignalR 集成的资料。 - 注册控制器,设置依赖处理器等。
  • 在 base基础 Autofac OWIN 集成上设置你的程序
public class Startup
{public void Configuration(IAppBuilder app) { var builder = new ContainerBuilder(); // STANDARD SIGNALR SETUP: // Get your HubConfiguration. In OWIN, you'll create one // rather than using GlobalHost. var config = new HubConfiguration(); // Register your SignalR hubs. builder.RegisterHubs(Assembly.GetExecutingAssembly()); // Set the dependency resolver to be Autofac. var container = builder.Build(); config.Resolver = new AutofacDependencyResolver(container); // OWIN SIGNALR SETUP: // Register the Autofac middleware FIRST, then the standard SignalR middleware. app.UseAutofacMiddleware(container); app.MapSignalR("/signalr", config); // To add custom HubPipeline modules, you have to get the HubPipeline // from the dependency resolver, for example: var hubPipeline = config.Resolver.Resolve<IHubPipeline>(); hubPipeline.AddModule(new MyPipelineModule()); } } 

OWIN 集成常见错误为使用GlobalHost。OWIN中配置你会抓狂. OWIN集成中,任何地方你都不能引用 。 点击这里查看微软关于这个和其它Ioc容器的文档。

转载于:https://www.cnblogs.com/icoolno1/p/6943630.html

SignalR集成Autofac相关推荐

  1. 入门系列-集成 Autofac

    集成 Autofac Autofac 是.Net世界中最常用的依赖注入框架之一. 相比.Net Core标准的依赖注入库, 它提供了更多高级特性, 比如动态代理和属性注入. 安装 Autofac 所有 ...

  2. 跟我一起学.NetCore之Asp.NetCore中集成Autofac扩展

    前言 前两节针对.NetCore自带的依赖注入进行简要概述,对于日常开发的需求应该是能满足了,那为什么还需要引入第三方依赖注入组件呢,这里就从自带的依赖注入来分析,有什么样的需求满足不了?主要归纳为以 ...

  3. .net core 集成 autofac.

    1. Install Install-Package Autofac Install-Package Autofac.Extensions.DependencyInjection 2.Startup ...

  4. ASP.NET Core 依赖注入-集成 Autofac

    概述 ASP.NET Core 支持依赖关系注入 (DI) 软件设计模式,这是一种在类及其依赖关系之间实现控制反转 (IoC) 的技术. 默认服务容器是 Microsoft.Extensions.De ...

  5. 使用 Autofac 进行依赖注入

    先说下为什么翻译这篇文章,既定的方向是架构,然后为了学习架构就去学习一些架构模式.设计思想. 突然有一天发现依赖注入这种技能.为了使得架构可测试.易维护.可扩展,需要架构设计为松耦合类型,简单的说也就 ...

  6. Castle DynamicProxy基本用法(AOP)

    本文介绍AOP编程的基本概念.Castle DynamicProxy(DP)的基本用法,使用第三方扩展实现对异步(async)的支持,结合Autofac演示如何实现AOP编程. AOP 百科中关于AO ...

  7. ABP官方文档翻译 0.0 ABP官方文档翻译目录

    一直想学习ABP,但囿于工作比较忙,没有合适的契机,当然最重要的还是自己懒.不知不觉从毕业到参加工作七年了,没留下点儿什么,总感觉很遗憾,所以今天终于卯足劲鼓起勇气开始写博客.有些事能做的很好,但要跟 ...

  8. 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来

    基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 转载于:https://github.com/Meowv/Blog.git 本篇文章将给项目进行瘦身,删掉对 ...

  9. 因MemoryCache闹了个笑话

    前言 是这么一回事: 我正在苦思一个业务逻辑,捋着我还剩不多的秀发,一时陷入冥想中-- 突然聊天图标一顿猛闪,打开一看,有同事语音: 大概意思是:同事把项目中Redis部分缓存换成MemoryCach ...

最新文章

  1. linux环境调用gsoap,Linux下gSOAP的使用 (c++)
  2. mediawiki安装使用
  3. 12个球问题--微软面试题
  4. linux网络协议栈之数据包处理过程,Linux网络协议栈之数据包处理过程
  5. 与mysql数据库的交互实战_实战教程丨五步教你优雅地在Windows下安装MySQL数据库...
  6. HDU - 5573 Binary Tree(思维+构造+二进制)
  7. Android listview优化以及listview混合itemview
  8. 程序员30岁之前如何月入五万
  9. Android播放器之SurfaceView与GLSurfaceView
  10. iOS编写最简单的界面切换应用
  11. HTML(一):HTML基本元素标签
  12. 潘多拉路由器固件备份
  13. 微信小程序4-小程序的api
  14. 【笔记17】使用 jad 工具把 java 的 class 文件转换为 java 文件;使用 luyten 把 java 的 jar 包转换为 java文件
  15. 简单的 js 日历控件
  16. PxCook 点击设计稿即可生成代码前端,高效智能的设计研发工具,智能标注软件。...
  17. win凭据添加计算机名,手动添加Windows凭据,彻底解决Win7系统打印共享-win7添加打印机...
  18. 解决WPS每点击一下保存,就会出现tmp文件
  19. 将爬取的实习僧网站数据传入HDFS
  20. Cygwin 下载安装

热门文章

  1. 读写EEPROM遇到的问题:16位地址的内容都是最后写入的数据。
  2. CTFshow php特性 web128
  3. CTFshow 信息收集 web13
  4. 在Matlab符号计算中灵活运用assume
  5. android 工作 绝望,我的人生绝望手游
  6. 使用ffmpeg裁剪和合并视频
  7. phpstorm配置Xdebug进行调试PHP教程
  8. RequestWindowFeature
  9. 猴子管理法则(网络文摘)
  10. 关于HtmlParser中Parser【org.htmlparser.Parser】这个类奇怪的地方...求解释【已获得解释】...