父类的匹配在 NRules 中确实有效。这是一个完整的工作示例。
public class A
{ }
public class C : A
{ }
public class TestRule : Rule
{
public override void Define()
{
A fact = null;
When()
.Match(() => fact);
Then()
.Do(x => Console.WriteLine("Test"));
}
}
public class Program
{
static void Main(string[] args)
{
var repo = new RuleRepository();
repo.Load(x => x.From(xx => xx.AssemblyOf<Program>()));
var factory = repo.Compile();
var session = factory.CreateSession();
session.Insert(new C());
session.Fire();
}
}
如果您发布其余代码,我可以更新此答案并显示问题所在。也许你没有在会话中插入事实,或者你没有调用Fire
方法,或者你在编译会话工厂时没有包含规则。