首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WCF尼尼特Ninject.ActivationException

WCF尼尼特Ninject.ActivationException
EN

Stack Overflow用户
提问于 2016-12-27 16:17:05
回答 1查看 42关注 0票数 0

我知道错误:

代码语言:javascript
复制
    Error activating IRule using binding from IRule to Crazy

A cyclical dependency was detected between the constructors of two services.

我有多个规则是我的"WCF服务“,规则实现了接口IRule:

代码语言:javascript
复制
public interface IRule
{
    warior ExecuteRule(warrior _warrior);
}

例如,“疯狂规则”如下所示:

代码语言:javascript
复制
public class Crazy : IRule
    {
        private readonly IRule _rule;

        public Crazy(IRule rule)
        {
            _rule = rule;
        }

        public wariors ExecuteRule(warriors _warriors)
        {
            using (var context = new warriors_officialEntities())
            {
                _warriors = context.warriors.SingleOrDefault(x => x.Name == _warriors.Name);
                _warriors.cursed = (_warriors.Sleep > 70 && _warriors.Hunger > 70);
                context.SaveChanges();
            }
            return _warriors;
        }
    }

我还使用了一个名为RuleFactory的九目标模块。我将一个IRule绑定到每个规则类,并给它们命名。

代码语言:javascript
复制
public class RuleFactory : NinjectModule
{

    public override void Load()
    {
        Bind<IRule>().To<Crazy>().Named("crazy");
        Bind<IRule>().To<Hungry>().Named("hunger");
        Bind<IRule>().To<Munchies>().Named("munchies");
        Bind<IRule>().To<Sleepy>().Named("sleepys");
    }
}

当我从服务中检索所有的wariors时,激发一个名为DoRules()的方法时,该方法将循环所有战士,并尝试为他们执行每条规则。

代码语言:javascript
复制
 IKernel _rules = new StandardKernel(new RuleFactory());
 public void DoRule(List<warriors> tmgs)
        {
            IEnumerable<IRule> rules = _rules.GetAll<IRule>();
            using (var context = new warriors_officialEntities())
            {
                foreach (warriors tmg in tmgs)
                {
                    foreach (var rule in rules)
                    {
                          rule.ExecuteRule(tmg);
                    }
                    tmg.LastAccess = DateTime.Now;

                    context.Entry(tmg).State = EntityState.Modified;
                }
                context.SaveChanges();
            }
        }

代码将在foreach (var rule in rules)中给出一个异常,知道如何解决这个问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-28 06:30:28

Crazy类‘接收一个IRule作为构造函数参数-但不使用它。这会导致周期性的依赖--但我相信你的问题中缺少了相关的约束。

异常发生在foreach (var rule in rules)上,因为GetAll返回一个IEnumerable,这只会导致在枚举实例时实际检索实例。因此,异常并不发生在GetAll上,而是发生在循环IEnumerable时。

由于Crazy类实际上并没有使用它得到的注入的IRule,所以只需从构造函数中删除它,那么异常就会消失。

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

https://stackoverflow.com/questions/41348545

复制
相关文章

相似问题

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