一直在看一下这里找到的 MicroRuleEngine:
https://github.com/runxc1/MicroRuleEngine
在其中一个单元测试中,存在以下代码:
[TestMethod]
public void ChildPropertyBooleanMethods()
{
Order order = this.GetOrder();
Rule rule = new Rule()
{
MemberName = "Customer.FirstName",
Operator = "EndsWith",//Regular method that exists on string.. As a note expression methods are not available
Inputs = new List<object> { "ohn" }
};
MRE engine = new MRE();
var childPropCheck = engine.CompileRule<Order>(rule);
bool passes = childPropCheck(order);
Assert.IsTrue(passes);
order.Customer.FirstName = "jane";
passes = childPropCheck(order);
Assert.IsFalse(passes);
}
这将测试 Order.FirstName 以“ohn”结尾,这么久这么好......但是我将如何更改 MRE 代码,以便我测试另一个对象上的值而不是测试字符串? ? 某些方面:
Rule rule = new Rule()
{
MemberName = "Customer.FirstName",
Operator = "EndsWith",//Regular method that exists on string.. As a note expression methods are not available
Inputs = new List<object> { new MemberValue<SomeClass>(someclass, "PartOfName") }
};
在哪里:
class SomeClass {
string PartOfName {get; set;}
}
和:
class MemberValue<T>(T instance, string memberName) {
...
}
我是 ExpressionTrees 的新手,所以任何帮助将不胜感激。