同一个接口在MVC中的多重实现
本文关键字:实现 接口 MVC 同一个 | 更新日期: 2023-09-27 18:12:33
如果我有相同接口的多个实现,例如:IRule
,我如何能够在我的控制器中解决它?
private readonly IRule[] _rules;
public HomeController(IRule[] rules)
{
_rules = rules;
}
public RunRules()
{
foreach (IRule rule in rules)
rule.RunRule();
}
我遇到了一个问题,我想设置我的控制器拉入一组规则,但不想单独列出每个规则,所以我有一个我设置的IRule[]
数组。
控制器:
private readonly IRule[] _rules;
public HomeController(IRule[] rules)
{
_rules = rules;
}
安装程序:
设置castle windsor installer.
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());
}