Tôi có một lớp học mà phải mất một mảng các giao diện trong các nhà xây dựng:Lâu đài Windsor không thể tiêm một mảng của các loại giao diện
public class Foo<T1, T2> : IFoo<T1, T2>
{
public Foo(IBar[] bars)
{
...
}
}
đăng đựng của tôi trông như sau:
container.Register(AllTypes.Pick().FromAssemblyNamed("...")
.WithService.FirstInterface());
container.AddComponent("foo", typeof(IFoo<,>), typeof(Foo<,>));
tôi có một số việc triển khai IBar và vùng chứa có thể định vị chúng một cách dứt khoát, như gọi số ServiceLocator.Current.GetAllInstances<IBar>()
hoạt động tốt.
Tuy nhiên, nếu tôi cố gắng để có được một thể hiện của IFoo, nó ném một ngoại lệ nói rằng nó không thể đáp ứng deoendency ... "mà không được đăng ký".
Nếu tôi thay đổi hàm tạo để lấy một cá thể IBar duy nhất thì nó hoạt động tốt.
Bất kỳ ý tưởng nào?
Xem thêm FAQ Windsor: http://using.castleproject.org/display/IoC/FAQ –
này có thể được thực hiện thông qua các tập tin cấu hình để thay thế? –
@Ben: không phải hiện tại, nhưng bạn có thể đề xuất nó trên uservoice: http://castle.uservoice.com: "Thêm subresolvers qua cấu hình xml" –