Castle Windsor在MVC中实现相同接口的多个实现

时间:2016-10-11 19:04:09

标签: c# asp.net-mvc castle-windsor castle

如果我有多个相同接口的实现,例如:IRule,我怎样才能在控制器中解析它?

private readonly IRule[] _rules;

public HomeController(IRule[] rules)
{
    _rules = rules;
}

public RunRules() 
{
    foreach (IRule rule in rules)
        rule.RunRule();
}

1 个答案:

答案 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());
}