Caliburn.Micro。使用 Autofac 自动为 IHandle 实现者调用 eventaggregator.Subscribe()

2023-11-22

In Caliburn.Micro作者的文档提到了这种可能性:

文档链接

IHandle继承自标记接口IHandle。这允许使用强制转换来确定对象实例是否订阅任何事件。如果您与 IoC 容器集成,这可以实现简单的自动订阅。大多数 IoC 容器(包括 SimpleContainer)都提供一个钩子,以便在创建新实例时调用。只需连接容器的回调,检查正在创建的实例以查看它是否实现了 IHandle,如果实现了,则在事件聚合器上调用 Subscribe。

Autofac 如何实现这一目标?

我尝试利用以下功能装饰者,但对于这种情况来说当然有点不合适。更重要的是,默认情况下我的实现者I句柄没有被注册为实例IHandle容器内。

P.S.提供这个improper实施以防万一它可能有任何用处,尽管我对此表示怀疑。

builder.RegisterInstance<IEventAggregator>(new EventAggregator());
builder.RegisterDecorator<IHandle>((container, handler) =>
{
    var eventAggregator = container.Resolve<IEventAggregator>();
    eventAggregator.Subscribe(handler);
    return handler;
}, "unsubscribed", "subscribed");

对 Caliburn 的工作原理做出一些假设,我认为您正在寻找的是:

builder.RegisterType<MyViewModel>();
builder.RegisterModule<AutoSubscribeHandlersModule>();

该模块的实现类似于:

class AutoSubscribeHandersModule : Module
{
    protected override AttachToComponentRegistration(
        IComponentRegistry registry,
        IComponentRegistration registration)
    {
        if (typeof(IHandle).IsAssignableFrom(registration.Activator.LimitType))
        {
            registration.Activated += (sender, e) => {
                var aggregator = e.Context.Resolve<IEventAggregator>();
                aggregator.Subscribe((IHandle)e.Instance);
            };
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Caliburn.Micro。使用 Autofac 自动为 IHandle 实现者调用 eventaggregator.Subscribe() 的相关文章

  • System.Windows.Controls.WebBrowser、System.Windows.Threading.Dispatcher 和 Windows 服务

    我正在尝试将一些 html 内容渲染为 Windows 服务中的位图 我正在使用 System Windows Controls WebBrowser 来执行渲染 基本渲染设置作为一个独立进程运行 并带有托管控件的 WPF 窗口 但作为服务
  • 为什么Windows 7无法加载程序集PresentationFramework.Aero2?

    我最近完成了我使用 Windows 8 开发的第一个 WPF 应用程序 它在我的机器上运行良好 我的一个朋友也在他的 Windows 8 机器上的 Visual Studio 中运行了它 并且成功了 我在我的机器上使用单击一次安装该程序 它
  • 隐藏继承的成员

    我正在寻找某种方法来有效隐藏继承的成员 我有一个继承自公共基类的类库 一些较新的后代类继承了依赖属性 这些属性已变得残存 并且在使用时可能会有点混乱智能感知或使用视觉设计器中的类 这些类都是为 WPF 或 Silverlight 2 0 编
  • WPF 列表框 + 扩展器事件

    我在列表框的 ItemTemplate 中有一个 Expander 渲染得很好 我遇到的问题是 我希望在展开和 或选择扩展器时触发 ListBox SelectionChanged 事件 MouseDown 事件似乎没有冒泡到 ListBo
  • 当 ValidationRules 无法共享时,在 DataTemplates 中重新使用绑定实例

    我正在寻找解决方案和 或为什么在 DataTemplate 中共享 Binding 实例背后的合理性 这最终归结为这样一个事实 在 DataTemplate 中 似乎没有办法为生成的每个控件强制在 DependencyProperty 上绑
  • 控制台项目中的 WPF 窗口?

    我最近启动了一个 C 项目 VS 2008 作为 控制台 项目 我在其中编写了一些库 测试程序等 现在我想添加几个 WPF 窗口 但看起来控制台项目不会让我这样做 我来自 Java 所以这有点奇怪 如何添加 WPF 表单 我将从 主 类中实
  • WPF 中可选择的 TextBlock 或带有格式化文本的 TextBox

    我遇到一种情况 我需要显示格式化文本 正常 粗体 突出显示 并且还应该是可选择的 以便用户可以复制文本 我使用了文本块 我可以使用内联内容流元素应用多种格式 但不幸的是它的文本不可选择 虽然文本框允许选择文本并复制到剪贴板 但它不允许我设置
  • 底部垂直滚动richtextbox [WPF]

    我有一个富文本框 当满了时我想自动滚动到底部 这可能吗 用xaml做这个吗 通过使用ScrollViewer ScrollChanged http msdn microsoft com en us library system window
  • 如何将绑定源设置为“self”/UserControl 代码隐藏

    如何设置绑定源以指向 此 UserControl CodeBehind 例如 从用户控件MarkdownEditor xaml 我想指出其中的属性MarkdownEditor xaml cs 无需设置即可执行此操作DataContext t
  • 在单个 WPF 控件中列出所有 Validation.Error?

    我试图找到一种简单的方法来绑定单个控件 例如 TextBlock 或 ListBox 以列出 WPF 表单上的所有验证错误 我能找到的大多数源代码示例只是将一个控件绑定到 Validation Errors 0 ErrorContent 它
  • 如何在 WPF 数据网格中添加页脚行?

    如何在 WPF 数据网格中添加页脚行 我必须在 WPF 数据网格中为每列的总和添加一行 我不想使用任何 dll 或 telerik 以及类似的东西 仅使用 Microsoft 组件来执行此操作 我正在尝试这样做
  • WPF 中的图像变得模糊

    我正在使用 C 在 WPF 中开发应用程序 我将图像放入 WrapPanel 中 并在带有一个边框的网格内显示 并在按钮中使用图像 问题是我的图像控件失去了质量 我无法在这里发布我的图片 所以我只是在这里描述 I used SnapsToD
  • 检索 Autofac 容器以解析服务

    在 C WindowForms 应用程序中 我启动一个 OWIN WebApp 它创建另一个类 Erp 的单例实例 public partial class Engine Form const string url http 8080 49
  • SpeechSynthesizer 中的持续内存泄漏

    我开发了一个项目 我想发布它使用 c WPF 和 System Speech Synthesizer 对象 阻止该项目发布的问题是 每当调用 SpeakAsync 时 都会留下内存泄漏 并最终导致失败 我相信在使用这个物体后我已经正确清理了
  • 如何使用 RowDefinition Height * 获取网格的实际网格行高度

  • 从程序集中加载 ResourceDictionary

    我在文件系统的某个地方有一个程序集 例如 C temp test dll 在该程序集中有一个 ResourceDictionary 例如 abc xaml 我怎样才能获得该资源字典 也许有一种使用反射的方法 到目前为止我还没有找到解决方案
  • 如何使WPF TreeView风格成为WinForms TreeView?

    WPF 默认的 TreeView 非常好 我仍然希望它有连接每个子元素的线 就像 Windows 窗体 TreeView 一样 我在网上搜索了一些例子 但设计得不够好 我怎样才能用WPF实现它 让我回答我自己的问题 Code 您需要做的只是
  • C# WPF 中的内存泄漏

    在处理所有使用过的对象后 我需要减少 c WPF 中的内存泄漏 但我无法通过使用以下代码片段完全减少内存消耗 这是我的代码 string str Uri uri private void Button Click object sender
  • 同步用户控件中多个属性的绑定

    我的 WPF 用户控件有一个丑陋的竞争条件 它是某种扩展的 ComboBox UserControl主要定义了两个可绑定的DependencyProperties 一个是选中项 另一个是一个列表 可以从列表中选择选中项 两者都是可绑定的 因
  • 获取列表框中视图中的项目

    我有一个 ListBox 其属性 VirtualizingStackPanel VirtualizationMode 设置为 回收 我正在绑定一个自定义集合 实现IList and IList

随机推荐

  • C++ 任意长度整数

    在C 中 是否可以定义任意长度的整数 所以不必使用uint64 t对于 33 到 64 位之间的任何内容 我可以定义自己的 34 位 36 位等整数 正如您提到的 编译器有自己的类型 long 大多数平台上为 32 位 和 long lon
  • Clr 命名空间映射到默认 xaml 命名空间

    我有点厌倦了必须在每个 xaml 文件中声明 xmlns 以及必须为自定义控件使用前缀 是否可以将 clr 命名空间映射到 http schemas microsoft com winfx 2006 xaml presentation 我在
  • 如何为 Eclipse 和 M2E 的 maven pom.xml 文件中的类路径条目定义访问规则?

    为了避免 jfxrt jar 的非法访问警告 我手动更改了类路径文件以包含访问规则 想要类路径条目
  • 如何用flutter检查输入的电话号码是否有效?

    我正在尝试检查输入的电话号码是否有效 意思是 如果我输入了世界上不存在的错误数字 那么它会向我显示一个内容为 请输入有效数字 的祝酒词 Expanded child TextField keyboardType TextInputType
  • 读取带有分隔符的文件

    如何从文件中读取行并将该行的特定段分配给结构中的信息 如何在空白行处停止 然后再次继续 直到到达文件末尾 背景 我正在构建一个程序 它将获取输入文件 读入信息 并使用双重哈希将该信息放入哈希表的正确索引中 假设我有结构 struct Dat
  • Gradle 为每个资源文件夹构建

    是否可以配置 Gradle 来构建几个 Android apk 文件 其中每个文件仅使用一个资源类型文件夹 I mean 构建 hdpi apk 构建 mdpi apk 构建 xhdpi apk 我知道我可以在构建之前简单地删除某些文件夹
  • GUI 的自动化测试 [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 这个问题与单元测试无关 它适用于桌面产品 这是关于 GUI 的测试以及测试是否在正确的时间在正确的文本框中输入了正确的内容 我曾经工作过的一家公司使用过WinRunner 不同的部门 所以
  • 在 C++ 中创建矩阵的正确方法

    我想为图创建一个邻接矩阵 因为我读过 使用以下形式的数组是不安全的matrix x y 因为它们不检查范围 所以我决定使用 stl 的向量模板类 我需要在矩阵中存储的只是布尔值 所以我的问题是 如果使用std vector
  • Jenkins REST buildWithParameters 覆盖默认参数值的 JSON 格式是什么

    我可以通过发送 POST 调用来使用其参数的默认值构建 Jenkins 作业http jenkins 8080 view Orion phase 2 job test remote api triggerring buildWithPara
  • Django Rest 框架不断返回嵌套关系错误

    盯着我的代码很长一段时间 我一直遇到同样的错误 有趣的是 我为模型的另一部分制作了一组类似的序列化器 并且它们工作得很好 这是我不断收到的错误 onderhoudapi conditiedeel json 处的 AttributeError
  • 在 VSTS 中运行 xunit.net 测试

    我运行时遇到问题xunit net测试在VSTS 运行构建计划时 Test assemblies步骤产生以下日志 2017 03 21T12 11 39 3302859Z section 开始 测试组件2017 03 21T12 11 39
  • 如何使用 lucene.net 实现多个过滤器的搜索

    我是 lucene net 的新手 我想在客户端数据库上实现搜索功能 我有以下场景 用户将根据当前选择的城市搜索客户 如果用户想要搜索其他城市的客户 则必须更换城市并重新进行搜索 为了细化搜索结果 我们需要提供针对区域 多个 Pincode
  • 滚动时检测 RecyclerView 何时到达最底部位置

    我有 RecyclerView 的代码 recyclerView RecyclerView rootview findViewById R id fabric recyclerView recyclerView setLayoutManag
  • Eclipse 项目中缺少 Maven 依赖项

    我们用maven建立了一个项目来解决依赖关系 它通常工作正常 但现在我尝试在新 PC 上编译并运行它 但我遇到了 Eclipse 中缺少依赖项的问题 有趣的是 如果我在控制台或 Eclipse 中运行 mvn package 它工作正常 甚
  • 具有 API 的开源论坛

    有人对基于 PHP Python 或 J2EE 的网络论坛有什么建议吗 该论坛具有良好的 API 可以通过编程方式创建用户和论坛主题 phpBB第一个想到的就是开源 因为它是免费的 实际上 几乎所有论坛平台都有某种 api 您可以通过编程方
  • APC 与 PHP 5.4 或 PHP 5.5 兼容吗?

    APC 似乎没有更新以与 php 5 4 版本一致 我希望他们像最初计划的那样将 APC 包含在 PHP 核心中 对于当前 APC 是否适用于 php 5 4 我似乎找不到任何明确的答案 我设法找到 php 5 4 的 Ubuntu 软件包
  • 如何将 Angular JS 集成到 Grails 2.3.4 中?

    我正在运行grails 2 3 4并考虑将 angularjs 集成到我的下一个应用程序中 我认为从服务器端来说最好的方法是使用grailsREST域和控制器类中的集成 然而我被困在这里了 如何让 grails 与 angularjs 进行
  • 为什么从 int 到 float 的转换会对值进行四舍五入?

    我正在阅读 CS APP 关于演员阵容 它说在演员阵容时从int到float 数字不能溢出 但可能会被四舍五入 这对我来说很奇怪 因为我不知道要舍入什么 所以我尝试了一下 我认为这只适用于非常大的整数 接近INT MAX INT MIN 但
  • 从 Excel 文档中的代码隐藏访问 ActiveX 或 Form 对象(文本框)

    Excel 文件中有几个作为 ActiveX 对象的文本框 我想从代码隐藏中访问它们 我正在将 ClosedXML 用于其他领域 但我愿意接受其他建议 要从 C 访问 OLE 对象 请添加对 Microsoft Forms 2 0 对象库的
  • Caliburn.Micro。使用 Autofac 自动为 IHandle 实现者调用 eventaggregator.Subscribe()

    In Caliburn Micro作者的文档提到了这种可能性 文档链接 IHandle继承自标记接口IHandle 这允许使用强制转换来确定对象实例是否订阅任何事件 如果您与 IoC 容器集成 这可以实现简单的自动订阅 大多数 IoC 容器