Tôi có một giao diện:bindings Ninject cho việc thực hiện điều phối của một giao diện
public interface IService
{
void DoStuff(int parm1, string parm2, Guid gimmeABreakItsAnExampleK);
}
Tôi muốn cấu hình Ninject (v3) bindings để tôi có thể có một "điều phối" phương pháp ngẫu nhiên gọi ra nhiều trường hợp của IService
, như vậy:
public sealed class DispatcherService : IService
{
private IEnumerable<IService> _children;
public DispatcherService(IEnumerable<IService> children)
{
this._children = children.ToList();
}
public void DoStuff(int parm1, string parm2, Guid gimmeABreakItsAnExampleK)
{
foreach(var child in this._children)
{
child.DoStuff(parm1, parm2, gimmeABreakItsAnExampleK);
}
}
}
Tuy nhiên, các ràng buộc của tôi, trông như thế này, gió lên ném một ngoại lệ trong thời gian chạy chỉ ra một sự phụ thuộc theo chu kỳ:
this.Bind<IService>().To<DispatcherService>();
this.Bind<IService>().To<SomeOtherService>()
.WhenInjectedExactlyInto<DispatcherService>();
this.Bind<IService>().To<YetAnotherService>()
.WhenInjectedExactlyInto<DispatcherService>();
Điều này có khả thi không? Nếu vậy, tôi đang làm gì sai? Liệu ninja có thể thoát khỏi sự phụ thuộc chu kỳ này?
Tại sao bạn cần 'WhenInjectedExactlyInto', tại sao không chỉ' To'? – casperOne
Vì 'WhenInjectedExactlyInto' ngăn' SomeOtherService' và 'YetAnotherService' khỏi bị tiêm vào bất cứ thứ gì ngoài' DispatcherService'. Tôi đã sử dụng một cách tiếp cận tương tự để "bọc" (xem http://stackoverflow.com/questions/6752674/dependency-injection-how-to-configure-interface-bindings-for-wrapping), nhưng tôi đang cố gắng làm cho nó hoạt động cho trường hợp đa tiêm. – FMM
Bạn đã xem xét các tiện ích mở rộng của Môi giới sự kiện khác nhau - tất cả đều làm những thứ mà các ví dụ của bạn làm ở mức độ sâu. OK, bạn nói đó chỉ là một ví dụ, tôi sẽ im lặng! –