我在编写一个规则引擎。我有一个接口IRule,它由许多规则实现。此外,我还有一个RuleExecutor,它会注入一个IEnumerable<IRule>依赖项。
我希望Unity将一个IEnumerable<IRule>注入到所有绑定实现中,但不幸的是它无法工作。
这是我的配置:
container.RegisterType<IRule, RuleA>("a");
container.RegisterType<IRule, RuleB>("b");
container.RegisterType<IRule, RuleC>("c");
container.RegisterType<IRule, RuleD>("d");
container.RegisterType<IRule, RuleE>("e");
container.RegisterCollection<IRule>();
container.RegisterType<IRuleExecutor, RuleExecutor>(new InjectionConstructor(typeof(IEnumerable<IRule>)));RegisterCollection是这样:
public static class UnityExtensions
{
public static void RegisterCollection<T>(this IUnityContainer container) where T : class
{
container.RegisterType<IEnumerable<T>>(new InjectionFactory(c => c.ResolveAll<T>()));
}
}解析时,我得到以下异常消息:
RuleExecutor没有接受参数()的构造函数。
这怎么可能与团结?
发布于 2018-03-07 13:07:35
统一将所有命名实例自动注入到IEnumerable<T>中。下面是一个有用的例子。
using System.Collections.Generic;
using Unity;
class Program
{
static void Main(string[] args)
{
var container = new UnityContainer();
container.RegisterType<IRule, RuleA>("a");
container.RegisterType<IRule, RuleB>("b");
container.RegisterType<IRule, RuleC>("c");
container.RegisterType<IRule, RuleD>("d");
container.RegisterType<IRule, RuleE>("e");
container.RegisterType<IRuleExecutor, RuleExecutor>();
var executor = container.Resolve<IRuleExecutor>();
}
}
public interface IRule { }
public class RuleA : IRule { }
public class RuleB : IRule { }
public class RuleC : IRule { }
public class RuleD : IRule { }
public class RuleE : IRule { }
public interface IRuleExecutor { }
public class RuleExecutor : IRuleExecutor
{
public RuleExecutor(IEnumerable<IRule> rules)
{
// Rules RuleA through RuleE are injected here...
}
}https://stackoverflow.com/questions/49151625
复制相似问题