2016-12-27 8 views
0

私はエラーを取得する:WCF Ninject Ninject.ActivationException

Error activating IRule using binding from IRule to Crazy 

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

私はmultpipleルールを持っているが、私の "WCFサービス" であるルールは、インタフェースのiRule実装しています。例えば

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

をルールクレイジールックス

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をすべてのルールクラスにバインドし、名前を付けます。

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(と呼ばれる手法を解雇され、この方法は、ループトラフは、すべての戦士になり、彼らのためにすべてのルールを実行しようとします。

コードで例外が発生しますforeach (var rule in rules)これを修正する方法はありますか?

答えて

1

クラス 'は、コンストラクタパラメータとしてIRuleを受け取りますが、使用しません。これは周期的な依存関係を引き起こしますが、関連するバインディングがあなたの質問に欠けていると思います。

GetAllが列挙されたときにインスタンスを実際に取得することにつながるIEnumerableを返すため、例外はforeach (var rule in rules)で発生します。したがって、例外はGetAllではなく、IEnumerableをループするときに発生します。

Crazyクラスは実際には使用されませんので、コンストラクタから削除するだけで例外はなくなります。

+0

これは機能します!私はそれを見ていない、ありがとう! – Ferryzijl

関連する問題