同一个接口在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();
}

同一个接口在MVC中的多重实现

我遇到了一个问题,我想设置我的控制器拉入一组规则,但不想单独列出每个规则,所以我有一个我设置的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());
}