首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在NRules类构造函数中注入DbContext?

如何在NRules类构造函数中注入DbContext?
EN

Stack Overflow用户
提问于 2019-06-11 10:43:34
回答 1查看 847关注 0票数 0

我正在使用NRules来定义规则,并试图在NRules基类中使用接口,但是发生了一些错误,我得到了“没有为这个对象定义无参数构造函数”的错误。下面是我的接口定义

代码语言:javascript
复制
{
    public interface ICalcDiscount
    {
        public void ApplyPoint(int point);
    }
    public class CalcDiscount:ICalcDiscount
    {
        private readonly UniContext _context;

       public CalcPoint(UniContext context)
        {
            _context = context;

        }

        public  void ApplyDiscount(int d)
        {
           _context.Discount.Add(new Discount{ CustomerId = 1, d= d});
           _context.SaveChanges();
        }
    }
}

NRule类

代码语言:javascript
复制
 public class PreferredCustomerDiscountRule : Rule
    {
        private readonly ICalcDiscount _d;

        public PreferredCustomerDiscountRule(ICalcDiscount d)
        {
            _d = d;
        }
        public override void Define()
        {
            Book book = null;


            When()

                .Match(() => book);


            Then()
                .Do(ctx => _c.ApplyDiscount(10));

        }

    }

当NRules开始加载程序集MissingMethodException时,我收到一个错误:没有为此对象定义无参数构造函数。

代码语言:javascript
复制
 //Load rules
    var repository = new RuleRepository();
    repository.Load(x => x.From(typeof(PreferredCustomerDiscountRule).Assembly));//problem is here!
 //Compile rules
    var factory = repository.Compile();
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-30 17:27:07

正如错误所说,您不能有一个包含参数的构造函数的规则。

您还应该解析规则定义中的依赖项,如NRules维基上的Rule Dependency所示。

因此,您的类应该类似于以下内容:

代码语言:javascript
复制
public class PreferredCustomerDiscountRule : Rule
    {
        public override void Define()
        {
            Book book = null;
            ICalcDiscount discountService = null;

            Dependency()
                .Resolve(() => discountService);

            When()
                .Match(() => book);


            Then()
                .Do(_ => discountService.ApplyDiscount(10));

        }

    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56535788

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档