C# 如何降低自动生成代码的可见性
我有一堆自动生成的代码(来自Ranorex GUI测试工具),它公开了一个公共界面,如下所示:C# 如何降低自动生成代码的可见性,c#,visibility,ranorex,C#,Visibility,Ranorex,我有一堆自动生成的代码(来自Ranorex GUI测试工具),它公开了一个公共界面,如下所示: public partial class MessageBoxPopupAppFolder : RepoGenBaseFolder { // Ranorex.Button exposes public methods like Click() public virtual Ranorex.Button ButtonYes { get { return _butt
public partial class MessageBoxPopupAppFolder : RepoGenBaseFolder
{
// Ranorex.Button exposes public methods like Click()
public virtual Ranorex.Button ButtonYes
{
get
{
return _buttonyesInfo.CreateAdapter<Ranorex.Button>(true);
}
}
}
我想到了一些解决方案,但似乎没有一个是真正令人满意的:
- 手动(或通过脚本)修改自动生成的代码以更改Ranorex方法的可见性。这将意味着一点名称空间重构,并且很难通过代码重新生成来维护
- 将此代码链接到一个完全独立的二进制文件中,并通过一个真正私有的API与之通信。还有很多工作要做
- 实现某种代码自我评估,以检测并报告(作为单元测试失败)该API的任何“禁止”使用
编辑:我想向我的团队成员(中间件的用户)公开的是面向业务的API(如
Acknowledge()
)。这很好。不好的是,我无法阻止Ranorex原始API(按钮。单击()
)出现 Ranorex不支持修改生成成员的可见性
第一条路听起来绝对是一条路,因为它似乎正是你想要的。在我看来,你对设计“太深入”了,无法用优雅、完全干净的解决方案来解决这个问题。所有的替代方案都有其自身的缺点,我可以建议的一个是为您在自己的类中公开的Ranorex类型提供一个适配器/门面类。然后,这些适配器将处理一些逻辑,然后将调用路由到真正的底层Ranorex对象。在您的
Acknowledge
示例中,这将是适配器上的一个方法,您公开的公共类型将仅是适配器
理想情况下,我希望Button类中有一个Click事件,这样您就可以听到它并做出相应的反应
为什么您需要直接将自动生成的类交给客户机,而不是交给您设计的有限接口?这似乎是这里的传统方法。我已经编辑了你的标题。请看“”,其中的共识是“不,他们不应该”。@millimoose:我确实给了他们一个有意义的API。但我不能阻止我的应用程序也给他们一个糟糕的面向按钮的API。见编辑我希望它能改变可见性本身,但还没有发现我到底在做什么的线索。我的问题是我无法阻止人们编写
RanorexObject.MessageBox.Click()
而不是MyAdapter.Acknowledge()
public class MyAdapter
{
private MessageBoxPopupAppFolder _myMessageBox;
public static void Acknowledge()
{
// some complex business rules
_myMessageBox.ButtonYes.Click();
}
}