Castle Windsor使用一个命令注入多个实例

时间:2014-01-02 08:00:14

标签: dependency-injection castle-windsor

我在同一个命名空间中有很多类实现相同的接口 如果我想注入这些类,我需要为每个实例显式声明命令。

namespace AllClasses{

 public class A<Brand> : IValidatable<Brand>{
 }

 public class B<Customer> : IValidatable<Customer>{
 }

 public class C<User> : IValidatable<User>{
 }

 public class D<Campaign> : IValidatable<Campaign>{
 }

}


public class INeedInjection{
   public INeedInjection(IValidatable<User> uv){}

}

有没有用单一命令注入所有上述类(A,B,C,D)?

由于

更新1
有大约25个类实现IValidatable,我不想为每个实现编写显式注入。所有的实现者都非常相似,所以我假设可能还有通配符命令。

1 个答案:

答案 0 :(得分:2)

您可以使用IValidatables类在程序集中注册所有Types;

该示例立即在当前程序集中注册实现IValidatable<T>的所有类,但Types上的其他方法允许您选择要注册的任何其他程序集;

_container.Register(
    Types.FromThisAssembly()
         .BasedOn(typeof (IValidatable<>))
         .WithService.Base());