问题标签 [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.

0 投票
1 回答
259 浏览

jquery - 如何即兴从特定状态动态添加和删除按钮?

我正在使用即兴提示,我想在特定条件下动态添加按钮。

在这种状态下,我需要 3 个用于特定条件的按钮
"NEWCONFIG", "YES", "NO":对于另一种情况,我需要 2 个按钮:"YES", "NO"

0 投票
1 回答
144 浏览

c# - 用反射制作新对象?

我不确定这是否可能,经过长时间的研究,我还没有找到结论性的东西。

我正在尝试从字典中动态创建一个新对象(本身就是一个新类型)。所以说我有键和值,键和值将成为返回值的属性。我可以这样使用的东西:

示例代码

对我来说重要的是从中获得智能感知。因此,我可以输入object.所有键并提出建议。这样我就不需要提前知道字典来访问这些值(否则我会简单地使用字典)。

我已经研究过Clay,但我不清楚如何使用它来获得我想要的智能感知。我也找到了这篇关于它的帖子。

此外,我检查了ImpromptuInterface但这两个文档都很差,或者我无法弄清楚。

如果 Clay 可以做到这一点(看起来确实如此),我该怎么做才能让它在其他不引用 Clay 的项目中作为库工作?

如果有不清楚的地方或这是重复的,请不要犹豫发表评论。

0 投票
2 回答
1117 浏览

c# - 如何使用即兴接口访问代理对象

使用impromptu-interface时如何访问 Duck Typed 代理对象。考虑我的代码,该代码说明了我在InvalidCastException尝试将 Duck Typed Object 转换为代理对象时得到的示例:

例外情况如下:

ConsoleApplication1.exe 中发生了“System.InvalidCastException”类型的未处理异常

附加信息:无法将类型为“ActLike_IPondBird_c7dd53902ec74f01a3844d4789244ea3”的对象转换为类型“ConsoleApplication1.Duck”。

0 投票
1 回答
444 浏览

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?

0 投票
1 回答
3669 浏览

c# - “ExpandoObject”不包含“PropertyChanged”的定义

我试图用来ImpromptuInterface解决我在这里遇到的问题。将接口实现添加到 ExpandoObject

我现在可以在我的基类中访问我的接口的各种属性,但我不能再订阅 ExpandoObject 的 PropertyChanged 事件。

在进行故障排除时,我能够简化问题,如图所示。

服务.cs

我收到一条错误消息,指出

“System.Dynamic.ExpandoObject”不包含“PropertyChanged”的定义

每次我尝试在构造函数中连接事件处理程序时都会发生这种情况。

事件日志 1

事件日志 2

我不能用ImpromptuInterface这种方式吗?

0 投票
0 回答
106 浏览

c# - 将即兴对象作为类返回?

我正在尝试创建一个上下文类来检测对属性的任何更改。我能够通过使用ImpromptuInterface包来实现这一点。

我想要实现的是让我的方法返回一个类而不是一个接口。

在我的 Class 类中,我的代理对象返回一个 IAuthor,因为这是 ImpromptuInterface 所需要的。但是我是否可以将 IAuthor 转换回 Author 以便 GetAuthor 方法返回一个 Author 对象并且仍然会实现 INotifyPropertyChanged?

0 投票
2 回答
233 浏览

c# - 使用 ExpandoObject 创建接口的“假”实现 - 动态添加方法

给你的脑筋急转弯!

我正在开发一个模块化系统,这样模块 A 可能需要模块 B,模块 B 也可能需要模块 A。但是如果模块 B 被禁用,它将根本不执行该代码并且什么也不做/返回 null。

稍微深入一点:

假设InvoiceBusinessLogic在模块“核心”内。我们还有一个“电子商务”模块,它有一个OrderBusinessLogic. 然后InvoiceBusinessLogic可能看起来像这样:

所以我想要的是:启用“电子商务”模块后,它实际上会在OrderBusinessLogic. 如果没有,它根本不会做任何事情。在此示例中,它什么也不返回,因此它可以简单地什么也不做,在其他将返回某些内容的示例中,它将返回 null。

笔记:

  • 正如您可能知道的那样,我使用的是依赖注入,它是一个 ASP.NET Core 应用程序,因此IServiceCollection负责定义实现。
  • 从逻辑上讲,简单地不定义实现IOrderBusinessLogic将导致运行时问题。
  • 从完成的大量研究中,我不想在我的应用程序的域/逻辑中调用容器。不要调用 DI 容器,它会调用你
  • 模块之间的这种交互保持在最低限度,最好在控制器内完成,但有时你无法绕过它(而且在控制器中,我需要一种方法来注入它们并使用它们)。

所以到目前为止我想出了3个选项:

  1. 我从不从模块“Core”调用模块“Ecommerce”,理论上这听起来是最好的方法,但实际上对于高级场景来说它更复杂。不是一个选项
  2. 我可以创建很多虚假的实现,具体取决于配置决定要实现哪一个。但这当然会导致双重代码,当引入新方法时,我必须不断更新假类。所以并不完美。
  3. 我可以通过使用反射和构建一个假实现ExpandoObject,并且在调用特定方法时什么也不做或返回 null。

最后一个选项是我现在所追求的:

通过使用Impromptu Interface,我能够成功地创建一个假实现。但是我现在需要解决的是动态对象还包含所有的方法(大部分是不需要的属性),但是那些很容易添加。所以目前我能够运行代码并起床,直到它会调用OrderBusinessLogic,然后从逻辑上讲,它会抛出该方法不存在的异常。

通过使用反射,我可以遍历接口中的所有方法,但是如何将它们添加到动态对象中呢?

注意:现在直接调用typeof(IOrderBusinessLogic),但稍后我会遍历某个程序集中的所有接口。

即兴有一个例子如下: expando.Meth1 = Return<bool>.Arguments<int>(it => it > 5);

但是我当然希望这是动态的,所以我如何动态插入返回类型和参数。

我确实理解接口的行为类似于合同,并且应该遵循合同,我也理解这是一种反模式,但是在达到这一点之前已经进行了广泛的研究和谈判,对于我们想要的结果系统,我们认为这是最好的选择,只是缺少一点 :)。

  • 我看过这个问题,我真的不打算将 .dll 排除在外,因为很可能我无法在 .dll 中IOrderBusinessLogic使用任何形式的文件InvoiceBusinessLogic
  • 我看过这个问题,但我并不真正理解如何在我的场景中使用 TypeBuilder
  • 我还研究了模拟接口,但大多数情况下,您需要为要更改的每个方法定义“模拟实现”,如果我错了,请纠正我。
0 投票
1 回答
70 浏览

c# - C#中的即兴问题

我在 C# 中使用 Impromptu,我有以下情况。

这是我要填充的课程:

这是接口 IFinalDecisionEvaluate 的定义:

我的代码目前看起来像这样:

此代码引发以下错误:

所以本质上,我需要简单地将我的列表对象映射到接口。有人可以帮忙解决这个错误吗?我无法弄清楚不匹配在哪里。

谢谢!

0 投票
1 回答
30 浏览

c# - 将 ImpromptuInterface 从 6.2.2 更新到 7.0.1(最新版本)

我的项目目前引用ImpromptuInterface 6.2.2并且效果很好。我正在将我所有的 nuget 包更新到最新版本。

将 ImpromptuInterface 从 6.2.2 更新到 7.0.1 时出现 2 个错误:

  • “即兴”不包含“InvokeGet”的定义
  • “即兴”不包含“GetMemberNames”的定义

我的代码:

看来这些方法已经不存在了。