类型强制转换支持
可以使用 ClassMemberBinding 类的 Cast 方法将一种类型的对象转换为另一个兼容类型的对象。 目前,业务规则编辑器工具不支持使用 强制转换 方法创建规则。 您必须使用规则引擎对象模型通过编程方式来创建规则,以充分利用此功能。
以下示例代码演示如何使用 Cast 方法将 System.Object 类的实例转换为 Cls2 类的实例。 此示例还演示如何访问类的嵌套成员,如 访问类的嵌套成员中所述。
using Microsoft.RuleEngine;
namespace RuleTypeCasting
{
class Cls1
{
//Note that return type is 'object', not Cls2
public object GetCls2Obj()
{
return new Cls2();
}
}
class Cls2
{
public void Log()
{
Console.WriteLine("In Cls2.Log method");
}
}
class Program
{
static void Main(string[] args)
{
//Create the condition list IF 1 == 1
Equal eq = new Equal(new Constant(1), new Constant(1));
//Create the action collection
ActionCollection ac = new ActionCollection();
//Create the class binding for the Cls1 class
ClassBinding cbCls1 = new ClassBinding(typeof(Cls1));
//Create the class member binding for the GetCls2Obj method in the Cls1 class
ClassMemberBinding cmGetCls2Obj = new ClassMemberBinding("GetCls2Obj", cbCls1);
//Type casting the return value of GetCls2Obj method (object) to Cls2 type
cmGetCls2Obj.Cast(typeof(Cls2));
//Create the class member binding to the Log method of Cls2 type
ClassMemberBinding cmLog = new ClassMemberBinding("Log", cmGetCls2Obj);
//Create a user function based on cmLog and add it to the action collection
UserFunction ufLog = new UserFunction(cmLog);
ac.Add(ufLog);
// Create the rule
Rule rl = new Rule("InvokeLogRule", eq, ac);
// Create the rule set or policy
RuleSet rs = new RuleSet("InvokeLogPolicy");
rs.Rules.Add(rl);
//Create the facts
Cls1 Cls1Obj = new Cls1();
//Execute the policy
PolicyTester tester = new PolicyTester(rs);
tester.Execute(Cls1Obj);
}
}
}
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈