WCF Ninject Ninject.ActivationException
WCF Ninject Ninject.ActivationException
我收到错误:
Error activating IRule using binding from IRule to Crazy
A cyclical dependency was detected between the constructors of two services.
我有多个规则是我的 "WCF service" 规则实现接口 IRule:
public interface IRule
{
warior ExecuteRule(warrior _warrior);
}
例如,Crazy 规则如下所示:
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;
}
}
我也在使用一个 ninject 模块,我称之为 RuleFactory。
我将 IRule 绑定到每个规则 class 并给它们命名。
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");
}
}
当我从我的服务中检索所有勇士时,会触发一个名为 DoRules() 的方法,此方法将遍历所有勇士并尝试为他们执行每条规则。
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)
中给出异常,知道如何解决这个问题吗?
Crazy
class' 接收一个 IRule
作为构造函数参数 - 但不使用它。这会导致循环依赖 - 但我相信您的问题中缺少相关绑定。
异常发生在 foreach (var rule in rules)
上,因为 GetAll
returns 一个 IEnumerable
只会导致在枚举实例时实际检索实例。因此,异常不会发生在 GetAll
上,而是在循环 IEnumerable
.
时发生
因为 Crazy
class 实际上并没有使用 IRule
它被注入只是从构造函数中删除它并且异常应该消失。
我收到错误:
Error activating IRule using binding from IRule to Crazy
A cyclical dependency was detected between the constructors of two services.
我有多个规则是我的 "WCF service" 规则实现接口 IRule:
public interface IRule
{
warior ExecuteRule(warrior _warrior);
}
例如,Crazy 规则如下所示:
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;
}
}
我也在使用一个 ninject 模块,我称之为 RuleFactory。 我将 IRule 绑定到每个规则 class 并给它们命名。
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");
}
}
当我从我的服务中检索所有勇士时,会触发一个名为 DoRules() 的方法,此方法将遍历所有勇士并尝试为他们执行每条规则。
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)
中给出异常,知道如何解决这个问题吗?
Crazy
class' 接收一个 IRule
作为构造函数参数 - 但不使用它。这会导致循环依赖 - 但我相信您的问题中缺少相关绑定。
异常发生在 foreach (var rule in rules)
上,因为 GetAll
returns 一个 IEnumerable
只会导致在枚举实例时实际检索实例。因此,异常不会发生在 GetAll
上,而是在循环 IEnumerable
.
因为 Crazy
class 实际上并没有使用 IRule
它被注入只是从构造函数中删除它并且异常应该消失。