ここで見つかった MicroRuleEngine を少し調べています。
https://github.com/runxc1/MicroRuleEngine
単体テストの 1 つに、次のコードが存在します。
[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 の初心者なので、どんな助けでも大歓迎です。