WCF Ninject Ninject.ActivationException

时间:2016-12-27 16:17:05

标签: c# wcf ninject

我收到错误:

editText = (EditText) findViewById(R.id.edit_message);

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

    Error activating IRule using binding from IRule to Crazy

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

例如规则Crazy看起来像这样:

public interface IRule
{
    warior ExecuteRule(warrior _warrior);
}

我也在使用一个ninject模块,我称之为RuleFactory。 我将一个IRule绑定到每个规则类并给它们命名。

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;
        }
    }

当我从我的服务中检索所有wariors时,会触发一个名为DoRules()的方法,此方法将循环通过所有的战士并尝试为它们执行每个规则。

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");
    }
}

代码会在 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(); } } 中给出例外,知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

Crazy班级&#39;收到IRule作为构造函数参数 - 但不使用它。这会导致周期性的依赖 - 但我相信你的问题中缺少相关的约束力。

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

由于Crazy类并未实际使用IRule,因此只需将其从构造函数中移除即可,异常就会消失。