Skip to content

Instantly share code, notes, and snippets.

@KevM
Created September 9, 2009 16:28
Show Gist options
  • Save KevM/183861 to your computer and use it in GitHub Desktop.
Save KevM/183861 to your computer and use it in GitHub Desktop.
var concreteIRuleOfMessageType = container.Model.InstancesOf(typeof(IRule<MESSAGE>)).FirstOrDefault().ConcreteType;
var concreteIRuleSetOfMessageType = container.Model.InstancesOf(typeof(IRuleSet<MESSAGE>)).FirstOrDefault().ConcreteType;
var ruleInstances = new SmartInstance<IRule<MESSAGE>[]>().TheArrayOf<IRule<MESSAGE>>("rules")
.Contains(rule =>
{
foreach (var ruleExpresion in ruleSetExpression.Rules)
{
var localRuleExpression = ruleExpresion;
rule.Instance(
new ConfiguredInstance(concreteIRuleOfMessageType)
.CtorDependency<IAction<MESSAGE>>("action").IsConcreteType(localRuleExpression.ActionType)
.CtorDependency<ICondition<MESSAGE>>("condition").IsConcreteType(localRuleExpression.ConditionType)
.CtorDependency<bool>("isRuleSetComplete").Is(localRuleExpression.ShouldRuleSetBeCompleteAfterThisRuleInvokes)
);
}
});
container.Configure(config =>
{
config.ForRequestedType<IRuleSet<MESSAGE>>().TheDefault.Is.OfConcreteType(concreteIRuleSetOfMessageType)
.WithName(ruleSetExpression.RuleSetName)
.WithCtorArg("ruleSetName").EqualTo(ruleSetExpression.RuleSetName)
.CtorDependency<IRule<MESSAGE>[]>("rules").Is(ruleInstances);
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment