0

我有一个从 A 继承的 C 类。现在我想编写一个与 A 类型匹配的规则。所以我尝试了以下代码:

 public class tmp : Rule
{
    public override void Define()
    {
        A t = null;
        When().Match<A>(() => t);
        Then().Do(ctx => Console.WriteLine("test"));
    }
}

但这不起作用。谁能解释一下,我该如何解决这个问题?这不起作用。

此致

4

1 回答 1

1

父类的匹配在 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方法,或者你在编译会话工厂时没有包含规则。

于 2020-05-25T15:58:59.490 回答