将 Castle Windsor 与 SignalR 集成 - 我应该如何处理这个问题?

2023-11-27

我正在开始使用 SignalR,一旦配置完所有内容,它就可以很好地工作。然而,我开发的几乎所有应用程序都使用 Castle Windsor,因此能够将它们一起使用会很棒。我想这样做的原因是这样我可以在持久连接内使用 Castle 依赖项/服务。

我仔细研究了源代码,看起来我可以将 DependencyResolver 替换为基于 Castle 的(即 Castle 实现 IDependencyResolver),或者我可以将 DependencyResolver 的用法更改为 Castle。

其中哪一个是更好的主意?我可以使用另一种方法来结合 Castle 和 SignalR 吗?

谢谢, 埃里克


2016 年 8 月更新

根据评论,我不再使用下面的方法,但现在使用 GlobalHost.DependencyResolver

所以在 Global.asax.cs 中我初始化了一些东西

public static void Init(IWindsorContainer container)
{
    var conn = configurationManager.ConnectionStrings["SRSQL"].ConnectionString;
    GlobalHost.DependencyResolver.Register(typeof(IHubActivator), 
                                      () => new SignalHubActivator(container));
    GlobalHost.DependencyResolver.Register(typeof(ILoggingService), 
                                      container.Resolve<ILoggingService>);
    //etc or you could just pass your existing container to the resolver
    GlobalHost.DependencyResolver.UseSqlServer(conn);    
}

然后在中心

private ILoggingService LoggingService{ get; set; }

    public NotificationHub()
    {
        LoggingService = GlobalHost.DependencyResolver.Resolve<ILoggingService>();
    }

并为了完整性

public class SignalHubActivator: IHubActivator
{
    private readonly IWindsorContainer _container;

    public SignalHubActivator(IWindsorContainer container)
    {
        _container = container;
    }


    public IHub Create(HubDescriptor descriptor)
    {
                var result=  _container.Resolve(descriptor.HubType) as IHub;

        if (result is Hub)
        {
            _container.Release(result);
        }

    return result;
    }

}

2012 年的旧答案

我选择了设置我们自己的 DependencyResolver 的第一个选项

AspNetHost.SetResolver(new SignalResolver(_container));

如果需要,我可以提供 SignalResolver,但为了便于阅读,我暂时不提供。

另一个重要的注意事项是集线器必须有一个空的构造函数,以便我们的城堡容器通过属性注入,例如

public class NotificationHub : Hub, INotificationHub
    { 

public INotificationService NotificationService { get; set; }

和解析器请求

public class SignalResolver : DefaultDependencyResolver
    {
        private readonly IWindsorContainer _container;

        public SignalResolver(IWindsorContainer container) 
        {
            if (container == null)
            {
                throw new ArgumentNullException("container");
            }
            _container = container;
        }

        public override object GetService(Type serviceType) 
        {
            return TryGet(serviceType) ?? base.GetService(serviceType);
        }

        public override IEnumerable<object> GetServices(Type serviceType)
        {
            return TryGetAll(serviceType).Concat(base.GetServices(serviceType));
        }

        private object TryGet(Type serviceType)
        {
            try
            {
                return _container.Resolve(serviceType);
            }
            catch (Exception)
            {
                return null;
            }
        }

        private IEnumerable<object> TryGetAll(Type serviceType)
        {
            try
            {
                var array = _container.ResolveAll(serviceType);
                return array.Cast<object>().ToList();
            }
            catch (Exception)
            {
                return null;
            }
        }
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 Castle Windsor 与 SignalR 集成 - 我应该如何处理这个问题? 的相关文章

  • Lambda 变量名 - 为短名称,还是不为短名称? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 通常 当我使用 lambda 时 我只使用 a b c d 作为变量名称 因为类型很容易推断 而且我发现短名称更易于阅读 这是一个例子 var
  • 如何保护 ASP.NET Web API [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想建立一个RESTful使用 ASP NET Web API 的 Web 服务 第三方开发人员将使用该服务来访问我的应用程序的数据
  • .NET:如何判断编码是否支持字符串中的所有字符?

    我需要输出大量文本 其中包括多种语言的各种字符 有时我需要以 Unicode 以外的字符编码 例如 Shift JIS 或 ISO 8859 2 输出文本 以便匹配它要访问的页面 如果文本中包含编码无法处理的字符 例如 ISO 8859 2
  • C# 3 新功能帖子(与 .Net 3.5 功能无关)[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions Net F
  • 如何从 nuget 包中排除子目录和内容

    所以我有一个网站正在尝试打包用于 Octopus Deploy 我有以下文件夹结构 Web Views WantThis Dontwantthis WantThis1 WantThis2 lots more Scripts 我试图排除 Do
  • 在 asp.net mvc 3 中使用 Last-Modified 标头和 OutputCacheAttribute 进行客户端缓存

    Edited 我想在客户端缓存图像 并且知道在 mvc 3 中有不同的方法可以做到这一点 如果我错了 请纠正我 1 你可以使用OutputCacheAttribute其工作原理是Expireshttp 标头 但它会回来304 Not Mod
  • 在一个数据库请求中连接 IQueryable 集合

    我使用实体框架 我需要连接两个集合 例如 IQueryable
  • 当前上下文中不存在名称“DefaultAuthenticationTypes”

    我正在尝试在我的 Web 应用程序中实现基于角色的授权 如下所示 HttpPost ActionName Login public ActionResult Login LoginViewModel model if ModelState
  • Roslyn 将内容嵌入到程序集中

    是否可以嵌入content使用 roslyn 进入程序集 嵌入资源效果很好 但不知道如何添加内容 我添加这样的资源 foreach string file in Directory GetFiles inputPath Where item
  • 如何使用反应式扩展同时读取交错文件

    我是反应式扩展的新手 我想使用它 在 c 中 来读取包含多个交错流的文件 基本上文件的格式是ABCDABCDABCD 我更喜欢按顺序读取文件并分离流 即AAA BBB 等 并并行处理每个流 为每个流使用单独的线程 必须有某种形式的缓冲来确保
  • 多线程调试技术

    我想知道是否有人知道多线程应用程序调试技术的一个很好的调查 理想情况下 我正在寻找基于案例的分析 死锁 饥饿 损坏的共享状态 Net 特定的或通用的 我不知道有哪篇文章或书籍可以满足您的需求 因此这是我从 12 年 Windows 多线程调
  • 使用 LINQ 迭代类属性

    有一个 ParsedTemplate 类 它有超过 300 个属性 类型为 Details 和 BlockDetails parsedTemplate 对象将由函数填充 填充这个对象后 我需要一个 LINQ 或其他方式 来查找是否有任何属性
  • .net core 1.1 中嵌入的 power bi

    目前 我正在尝试在 Visual Studio 2017 中为我的 net core 1 1 项目导入 powerbi 包 但是 我收到以下错误 Install Package Package Microsoft PowerBI Core
  • 未分配给变量的类实例是否会过早被垃圾回收?

    我什至不知道我的问题是否有意义 这只是我不明白的事情 并且在我的脑海中旋转了一段时间 考虑有以下课程 public class MyClass private int myVar public void DoSomething Do som
  • 转义字符串中的反斜杠

    我想知道什么是转义字符串中的反斜杠而不添加不必要的斜杠的好方法 我的意思是 通常如果我想转义字符串中的反斜杠 最简单的方法是使用String Replace 像这样 string s someString Replace 可以使用正则表达式
  • Castle Windsor依赖注入:使用调用者类型作为参数

    以下类在温莎城堡容器中注册 namespace MyNamespace class Foo IFoo public Foo ILog log log log ILog是一个log4net记录器 当前注册如下 Component For
  • JetBrains Rider 针对 4.5 框架,无法切换到 4.7

    基本上 当尝试添加不支持旧框架的 NuGet 包时 会出现错误 但是在项目配置中只有 4 5 可用 在项目创建过程中 不存在选择目标的选项 有什么方法可以正确配置它吗 I haven t found out how to set up NE
  • 在部分视图中传递参数 - MVC3/Razor

    如何将参数传递给 MVC3 razor 中的局部视图 我在 MVC 项目中用部分视图替换了常规视图页面 对于常规视图页面 我传递了如下参数 public ActionResult MeanQ int id Access access db
  • 如何使 WinForms UserControl 填充其容器的大小

    我正在尝试创建一个多布局主屏幕应用程序 我在顶部有一些按钮链接到应用程序的主要部分 例如模型中每个实体的管理窗口 单击这些按钮中的任何一个都会在面板中显示关联的用户控件 面板包含用户控件 而用户控件又包含用户界面 WinForms User
  • 使用 apachesoap:使用 .net 在 Web 服务中映射复杂数据类型

    我有一个用 Coldfusion 编程的 Web 服务 我试图使用 c net 来使用它 特定的 Web 服务返回一个 Coldfusion 结构 具有键和值的项目的集合 该结构由 Web 服务公开为 apachesoap Map 类型的复

随机推荐

  • 在R图形中,绘制字符(pch)16和19之间有什么不同?

    除了提到 填充 与 固体 之外 我找不到任何文档 library graphics plot new points 48 5 pch 19 points 52 5 pch 16 Edit Winston Chang的解释相当彻底地回答了我的
  • 如何用matplotlib画一条线?

    我找不到一种方法来绘制任意线matplotlibPython 库 它允许绘制水平线和垂直线 带有matplotlib pyplot axhline and matplotlib pyplot axvline 例如 但我不知道如何通过两个给定
  • SVN(服务器 - 预提交挂钩):了解正在提交的文件列表

    我想知道如何获取在预提交挂钩上提交的文件列表 如果该列表不包含特定路径中的特定文件 那么我想拒绝提交 钩子脚本应该使用svnlook命令与否svn The svnlook命令可以采取交易号提交的 如果这是预提交挂钩 则需要使用事务号 如果这
  • Common lisp :KEY 参数使用

    The KEY参数包含在 Common Lisp 附带的一些函数中 我发现的所有关于它们的描述都没有帮助 并且 KEY在搜索引擎中很难搜索 因为 通常被忽略 例如 它将如何使用member函数允许两者 TEST and KEY The ke
  • 运行 firebase 部署时未找到 404 页面

    我使用 React 和 Google 的 Firebase 构建了一个令人惊叹的网络应用程序auth和数据库 在我的本地服务器上 一切运行良好 我可以对某些用户进行身份验证 并在成功登录后导航到下一页 当使用 firebase 托管部署我的
  • make 用于编译 — 项目中文件夹和子文件夹中的所有 *.c 文件

    为了编译两个文件 我创建了一个 makefile 在其中提及对象名称 或者我可以使用 patsubst 来使用模式规则 Makefile for building tapp Copyright 2010 FriendlyARM http w
  • “==”和“是”有区别吗?

    这个问题的答案是社区努力 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 My 谷歌 fu让我失望了 在 Python 中 以下两个相等测试是否等效 n 5 Test one if n 5 print Yay Test two if
  • typedef struct :默认初始化

    typedef struct foo bool my bool int my int foo 在上面的例子中我明白了my bool将被随机初始化为 true 或 false 但怎么样my int 我假设my int默认初始化为 0 但情况似
  • 获取使用 git-svn 重命名的 SVN 存储库的完整历史记录

    我有一个 SVN 存储库 已从 Project 重命名为 Project v1 然后我做了一个git svn clone创建重命名的 SVN 文件夹的 git 版本 When I git log在新创建的 git 存储库中 我只看到一个历史
  • Select2 4.0.0 Bootstrap 主题

    在select2 4 0版本中有一个主题选项 但是在文档中我找不到该选项的含义以及如何创建自定义主题 https select2 github io examples html 我找到了 select2 的 bootstrap 3 主题 但
  • ESP8266 for Arduino IDE (xtensa-lx106-elf-gcc) 和 std::map 链接错误

    是否可以将地图与 ESP8266 一起用于 Arduino 包 这是我的代码 include
  • 如何在CSS选择器中排除特定的类名?

    当用户鼠标悬停类名为的元素时 我尝试应用背景颜色 reMode hover 但我不想改变颜色 如果元素also has reMode selected 注意 我只能使用 CSS 而不是 javascript 因为我在某种有限的环境中工作 为
  • 聚合物预载旋转器

    有时聚合物加载需要一段时间 并且在使用时 页面保持空白 直到一切准备就绪 有没有办法在页面提供服务和聚合物完成其魔力的时间之间显示某些内容 The 文档描述了unresolved属性清除了其中一些问题 虽然申请很常见unresolved t
  • 如何使用 React.js 在 Sails.js 上渲染服务器端模板?

    我正在尝试使用 Sails js 和 React 构建一个同构应用程序 客户端部分很简单 但我遇到了服务器端渲染的问题 当我尝试使用 React 服务器渲染 jsx 文件时 我得到了以下信息 renderToString You must
  • 使用 Retrofit v1.9.0 添加重复参数

    有一个类似的问题被问到here 但我的情况有点不同 我正在尝试提出类似于以下内容的请求 我有两个问题让事情变得困难 首先 重复参数 多次设置 foo 的值 会阻止使用QueryMap 我无法选择以不同的方式传递查询字符串中的值 就像作为数组
  • 选择递增整数

    我想知道是否可以从mysql表中选择递增的整数 如果可能的话 我怎样才能实现这一目标 我的情况是 我有一堆数据 我需要做INSERT INTO newtable SELECT somefield FROM sometable 然而 有一个字
  • Restangular POST 始终为空

    我想我不明白 POST 是如何在 RESTful api 中完成的 当在 Restangular 中创建一个新对象时 var user name John id 123 Restangular one building 5 post use
  • IIS7:为所有 aspx 页面设置“无缓存”,但不包括图像/css/js

    我不想在任何地方缓存我的 aspx 页面 由于某种原因 IE 忽略从我的母版页设置的元标记 我想看看是否可以将 Http 响应标头设置为 Cache Control no cache 设置类似 HttpContext Current Res
  • WiX XmlConfig:在 XmlConfig 中嵌套 XmlConfig 的目的

    目的和 或收益是什么 除了增加创建 删除属性的可读性之外 嵌套一个XmlConfig另一个元素中的元素XmlConfig元素 我所指的示例 我正在使用WiX 3 6
  • 将 Castle Windsor 与 SignalR 集成 - 我应该如何处理这个问题?

    我正在开始使用 SignalR 一旦配置完所有内容 它就可以很好地工作 然而 我开发的几乎所有应用程序都使用 Castle Windsor 因此能够将它们一起使用会很棒 我想这样做的原因是这样我可以在持久连接内使用 Castle 依赖项 服