- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在构建一个 WinForms 应用程序,其 UI 仅包含 NotifyIcon
及其动态填充的 ContextMenuStrip
。有一个 MainForm
将应用程序保存在一起,但它永远不可见。
我开始尽可能可靠地构建它(使用 Autofac 处理对象图)并且对我的成功非常满意,即使与 O 部分也相处得很好。通过我目前正在实现的扩展,我似乎发现了我的设计中的一个缺陷,需要稍微改造一下;我想知道我需要走的路,但对于如何准确定义依赖关系有点不清楚。
如上所述,菜单在启动应用程序后部分动态填充。为此,我定义了一个 IToolStripPopulator
接口(interface):
public interface IToolStripPopulator
{
System.Windows.Forms.ToolStrip PopulateToolStrip(System.Windows.Forms.ToolStrip toolstrip, EventHandler itemclick);
}
MainForm
中,
Load()
方法调用
PopulateToolStrip()
和
ContextMenuStrip
和一个在表单中定义的处理程序。填充器的依赖关系仅与获取用于菜单项的数据有关。
IToolStripPopulator
界面后面,因为表单根本不应该关心它。
IToolStripPopulator
接口(interface)重命名为更具体的东西*并创建了一个新接口(interface),其
PopulateToolStrip()
方法不采用
EventHandler
参数,而是注入(inject)到对象中(也允许在实现等所需的处理程序数量方面具有更大的灵活性)。这样我的“最重要的”
IToolStripPopulator
可以很容易地成为任意数量的特定适配器的适配器。
MainForm
中定义,因为它具有正确响应菜单事件所需的所有其他依赖项,并且它还“拥有”菜单。这意味着我对最终注入(inject) MainForm 的
IToolStripPopulator
对象的依赖需要使用
MainForm
依赖于
Lazy<T>
对象本身。
IClickHandlerSource
接口(interface):
public interface IClickHandlerSource
{
EventHandler GetClickHandler();
}
MainForm
实现的,我特定的
IToolStripPopulator
实现依赖于
Lazy<IClickHandlerSource>
。虽然这有效,但它是不灵活的。我要么必须为数量可能不断增加的处理程序定义单独的接口(interface)(使用
MainForm
类严重违反 OCP)或不断扩展
IClickHandlerSource
(主要违反 ISP)。
public interface IEventHandlerSource
{
EventHandler Get(EventHandlerType type);
}
MainForm
实现并作为惰性单例注入(inject),而
EventHandlerType
将是具有我需要的不同类型的自定义枚举。这仍然不是非常符合 OCP,但相当灵活。
EventHandlerType
显然会对每种新类型的事件处理程序进行更改,
MainForm
中的解析逻辑也是如此,除了新的事件处理程序本身和(可能)新编写的
IToolStripPopulator
的附加实现之外。
IEventHandlerSource
的单独实现(作为唯一对象)依赖于
Lazy<MainForm>
并将
EventHandlerType
选项解析为
MainForm
中定义的特定处理程序?
MainForm
中实际获取事件处理程序,但现在似乎不太可能。
最佳答案
What is my best option here, providing the loosest coupling and most elegant resolution of the different event handlers?
EventAggregator
在这种情况下,模式可以为您提供帮助(您的
IEventHandlerSource
与此类似):
ITool<T>
这样的界面会更好。并将工具列表存储在
MainForm
中.一些 Action 后
MainForm
将调用此工具中的某些方法。
关于c# - IOC : Wiring up dependencies on event handlers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11059298/
我正在研究 netwire 包,试图了解 FRP,我有一个简单的问题。 从以下简单的线路开始,我能够每 5 秒(大约)发出一个事件 myWire :: (Monad m, HasTime t s) =
我正在尝试“正确”地在 netwire 5 中实现一组动态电线。我已阅读wires of wires的答案问题,而且我不太喜欢示例中的代码如何依赖于转换为行为的 Event 在恰好一次执行上显示非空>
本文整理了Java中org.fabric3.spi.wire.Wire.getInvocationChains()方法的一些代码示例,展示了Wire.getInvocationChains()的具体用
本文整理了Java中org.apache.commons.httpclient.Wire.wire()方法的一些代码示例,展示了Wire.wire()的具体用法。这些代码示例主要来源于Github/S
我用 Google 搜索了很多次,看来我不是唯一一个在真正理解 Wire.write() 和 Wire.read() 方面遇到问题的人。作为新手,我几乎从不使用别人已经编写的库,我尝试为模块创建我的类
我正在尝试启动我的一个 bundle ,但一启动它,我就收到以下异常。我不确定是什么问题。 org.osgi.framework.BundleException: Unresolved constra
我一直在尝试关注“使用 OSGi 构建模块化云应用程序”。在“创建第一个 OSGi 应用程序”一书的第 3 章中,作者描述了如何使用 bndtools 在 eclipse 中创建一个带有服务的简单 O
我正在编译一个使用org.json的Java插件。在添加此插件之前,该插件已能够编译并正确运行。我在stackoverflow上看到了类似的问题,但是没有一个问题使用gradle解决。 在我的类顶部,
我是 Java/Karaf 4.0.9/Maven/Pom/Camel 的新手,我无法解决问题 pom.xml文件中的Json部分,这里我改了很多Json version , 但没有用。
我正在使用最新版本的 atlassian SDK 为 JIRA 开发插件。我已经编写了大部分代码,并向我的项目的 pom.xml 文件添加了一些我需要的依赖项(见下文)。 不幸的是,在运行 atlas
我下载了 Camel CXF 示例“camel-example-cxf-osgi ”,并且能够毫无问题地运行 mvn install 命令(根据 readme.md 文件),然后当我尝试安装时它在 F
我正在使用 maven-bundle-plugin 构建一个 war 文件作为一个包,我想在 Felix 中部署它。这是相同的 POM 文件。 4.0.0 net.java jvnet-p
Wired's移动 View (将您的用户代理设置为 iOS Safari 以在桌面上查看它)具有对标准带下划线超链接样式的优雅转折: 我认为这是完全通过 CSS 实现的,没有外部图形,但不是: ba
我最近注意到 Wired 杂志的链接有一条蓝色下划线,该下划线很粗,横跨文本下行部分,并且颜色与文本不同。这是一个 random page举个例子。 我不认为这是用 bottom-border 完成的
我正在创建一个 8 位无符号 javascript 数组: var myArray = Uint8Array(64); 在客户端和服务器上操作这个数组,然后通过 socket.io 连接发送它。我们
我想在 selenium-wire 中获取一个响应主体作为字符串,我最终会将其解析为 JSON。selenium-wire 中的 response.body 给出字节字符串。我尝试将其解码为 resp
我在Linux服务器上安装seleniumwire库时遇到问题,它向我发送密码时出现了错误,我已经尝试解决它,但是我没有能力,有什么想法吗? Caused by: process didn
我正在尝试(在本地)运行 AngularJS 中的第三个示例 http://angularjs.org/new称为“Wire up a Backend”,运气不好(在 Chrome 上)。 它提示:
我有几个不同的部署。Deployment A: export port 3333Deployment B: export port 4444我想使用单个服务(具有 LoadBalancer 类型)来导
我使用 eclipse 为 arduino 制作项目。我将“Wire.h”包含到一个新类中,并且在 arduinocore 库项目中,我在 Wire.h header 处收到错误。错误在于该行76 最
我是一名优秀的程序员,十分优秀!