如果我有多个相同接口的实现,例如:IRule
,我怎样才能在控制器中解析它?
private readonly IRule[] _rules;
public HomeController(IRule[] rules)
{
_rules = rules;
}
public RunRules()
{
foreach (IRule rule in rules)
rule.RunRule();
}
答案 0 :(得分:4)
我遇到了一个问题,我想设置我的控制器来引入一系列规则,但是我不想自己列出每个规则,所以我有一个IRule[]
的数组我建立。
控制器:
private readonly IRule[] _rules;
public HomeController(IRule[] rules)
{
_rules = rules;
}
安装程序:
设置城堡windsor安装程序。
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(Component.For<IRule>().ImplementedBy<ValidateNPIRule>());
container.Register(Component.For<IRule>().ImplementedBy<ValidateZipRule>());
}
重要的部分是.AddSubResolver
的路线
添加CollectionResolver
是安装程序一次解决所有规则所需的内容,我可以将它们放入数组中。
的Global.asax:
protected void Application_Start()
{
WindsorContainer container = new WindsorContainer();
container.Kernel.Resolver.AddSubResolver(new CollectionResolver(container.Kernel, true));
container.Install(FromAssembly.This());
}