问题标签 [impromptu-interface]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
jquery - 如何即兴从特定状态动态添加和删除按钮?
我正在使用即兴提示,我想在特定条件下动态添加按钮。
在这种状态下,我需要 3 个用于特定条件的按钮
"NEWCONFIG", "YES", "NO"
:对于另一种情况,我需要 2 个按钮:"YES", "NO"
c# - 用反射制作新对象?
我不确定这是否可能,经过长时间的研究,我还没有找到结论性的东西。
我正在尝试从字典中动态创建一个新对象(本身就是一个新类型)。所以说我有键和值,键和值将成为返回值的属性。我可以这样使用的东西:
示例代码
对我来说重要的是从中获得智能感知。因此,我可以输入object.
所有键并提出建议。这样我就不需要提前知道字典来访问这些值(否则我会简单地使用字典)。
我已经研究过Clay,但我不清楚如何使用它来获得我想要的智能感知。我也找到了这篇关于它的帖子。
此外,我检查了ImpromptuInterface但这两个文档都很差,或者我无法弄清楚。
如果 Clay 可以做到这一点(看起来确实如此),我该怎么做才能让它在其他不引用 Clay 的项目中作为库工作?
如果有不清楚的地方或这是重复的,请不要犹豫发表评论。
c# - 如何使用即兴接口访问代理对象
使用impromptu-interface时如何访问 Duck Typed 代理对象。考虑我的代码,该代码说明了我在InvalidCastException
尝试将 Duck Typed Object 转换为代理对象时得到的示例:
例外情况如下:
ConsoleApplication1.exe 中发生了“System.InvalidCastException”类型的未处理异常
附加信息:无法将类型为“ActLike_IPondBird_c7dd53902ec74f01a3844d4789244ea3”的对象转换为类型“ConsoleApplication1.Duck”。
c# - Runtime multiple inheritance with impromptu-interface
I'm trying to get runtime multiple inheritance to work using impromptu-interface but I'm stuck when I want to pass the object along to a method.
Microsoft.CSharp.RuntimeBinder.RuntimeBinderException : The best overloaded method match for 'MyStuff.PaintWheels(IWheels)' has some invalid arguments
I've tried to cast but get InvalidCastException
:
System.InvalidCastException : Unable to cast object of type 'ImpromptuInterface.ActLikeCaster' to type 'MyStuff.IWheels'.
The following works but I'm not sure this is the correct way; it seem unwarranted to convert car to IWheels
when IWheels
interface should already be inherited:
What is the correct way of achieving runtime multiple inheritance using impromptu-interface?
c# - “ExpandoObject”不包含“PropertyChanged”的定义
我试图用来ImpromptuInterface
解决我在这里遇到的问题。将接口实现添加到 ExpandoObject。
我现在可以在我的基类中访问我的接口的各种属性,但我不能再订阅 ExpandoObject 的 PropertyChanged 事件。
在进行故障排除时,我能够简化问题,如图所示。
服务.cs
我收到一条错误消息,指出
“System.Dynamic.ExpandoObject”不包含“PropertyChanged”的定义
每次我尝试在构造函数中连接事件处理程序时都会发生这种情况。
事件日志 1
事件日志 2
我不能用ImpromptuInterface
这种方式吗?
c# - 将即兴对象作为类返回?
我正在尝试创建一个上下文类来检测对属性的任何更改。我能够通过使用ImpromptuInterface包来实现这一点。
我想要实现的是让我的方法返回一个类而不是一个接口。
在我的 Class 类中,我的代理对象返回一个 IAuthor,因为这是 ImpromptuInterface 所需要的。但是我是否可以将 IAuthor 转换回 Author 以便 GetAuthor 方法返回一个 Author 对象并且仍然会实现 INotifyPropertyChanged?
c# - 使用 ExpandoObject 创建接口的“假”实现 - 动态添加方法
给你的脑筋急转弯!
我正在开发一个模块化系统,这样模块 A 可能需要模块 B,模块 B 也可能需要模块 A。但是如果模块 B 被禁用,它将根本不执行该代码并且什么也不做/返回 null。
稍微深入一点:
假设InvoiceBusinessLogic
在模块“核心”内。我们还有一个“电子商务”模块,它有一个OrderBusinessLogic
. 然后InvoiceBusinessLogic
可能看起来像这样:
所以我想要的是:启用“电子商务”模块后,它实际上会在OrderBusinessLogic
. 如果没有,它根本不会做任何事情。在此示例中,它什么也不返回,因此它可以简单地什么也不做,在其他将返回某些内容的示例中,它将返回 null。
笔记:
- 正如您可能知道的那样,我使用的是依赖注入,它是一个 ASP.NET Core 应用程序,因此
IServiceCollection
负责定义实现。 - 从逻辑上讲,简单地不定义实现
IOrderBusinessLogic
将导致运行时问题。 - 从完成的大量研究中,我不想在我的应用程序的域/逻辑中调用容器。不要调用 DI 容器,它会调用你
- 模块之间的这种交互保持在最低限度,最好在控制器内完成,但有时你无法绕过它(而且在控制器中,我需要一种方法来注入它们并使用它们)。
所以到目前为止我想出了3个选项:
- 我从不从模块“Core”调用模块“Ecommerce”,理论上这听起来是最好的方法,但实际上对于高级场景来说它更复杂。不是一个选项
- 我可以创建很多虚假的实现,具体取决于配置决定要实现哪一个。但这当然会导致双重代码,当引入新方法时,我必须不断更新假类。所以并不完美。
- 我可以通过使用反射和构建一个假实现
ExpandoObject
,并且在调用特定方法时什么也不做或返回 null。
最后一个选项是我现在所追求的:
通过使用Impromptu Interface,我能够成功地创建一个假实现。但是我现在需要解决的是动态对象还包含所有的方法(大部分是不需要的属性),但是那些很容易添加。所以目前我能够运行代码并起床,直到它会调用OrderBusinessLogic
,然后从逻辑上讲,它会抛出该方法不存在的异常。
通过使用反射,我可以遍历接口中的所有方法,但是如何将它们添加到动态对象中呢?
注意:现在直接调用typeof(IOrderBusinessLogic)
,但稍后我会遍历某个程序集中的所有接口。
即兴有一个例子如下:
expando.Meth1 = Return<bool>.Arguments<int>(it => it > 5);
但是我当然希望这是动态的,所以我如何动态插入返回类型和参数。
我确实理解接口的行为类似于合同,并且应该遵循合同,我也理解这是一种反模式,但是在达到这一点之前已经进行了广泛的研究和谈判,对于我们想要的结果系统,我们认为这是最好的选择,只是缺少一点 :)。
c# - C#中的即兴问题
我在 C# 中使用 Impromptu,我有以下情况。
这是我要填充的课程:
这是接口 IFinalDecisionEvaluate 的定义:
我的代码目前看起来像这样:
此代码引发以下错误:
所以本质上,我需要简单地将我的列表对象映射到接口。有人可以帮忙解决这个错误吗?我无法弄清楚不匹配在哪里。
谢谢!
c# - 将 ImpromptuInterface 从 6.2.2 更新到 7.0.1(最新版本)
我的项目目前引用ImpromptuInterface 6.2.2并且效果很好。我正在将我所有的 nuget 包更新到最新版本。
将 ImpromptuInterface 从 6.2.2 更新到 7.0.1 时出现 2 个错误:
- “即兴”不包含“InvokeGet”的定义
- “即兴”不包含“GetMemberNames”的定义
我的代码:
看来这些方法已经不存在了。