2012-12-18 34 views
5

Chúng tôi đang sử dụng mô hình sự kiện tên miền và dựa vào container IoC của chúng tôi để xác định vị trí xử lý cho một loại đặc biệt của sự kiện:Làm thế nào để quét tất cả các triển khai của một kiểu generic với Ninject

public interface IHandleEvent<TEvent> where TEvent : IEvent 
{ 
    void Handle(TEvent evnt); 
} 

Với StructureMap chúng ta có thể quét và đăng ký tất cả các loại thực hiện giao diện trên như sau:

Scan(cfg => 
{ 
    cfg.TheCallingAssembly(); 
    cfg.ConnectImplementationsToTypesClosing(typeof(IHandleEvent<>)); 
}); 

có tương đương với Ninject?

Hiện nay tôi đang gặp phải ràng buộc mỗi xử lý cá nhân như sau:

kernel.Bind<IHandleEvent<SomeEvent>>().To<EventHandler1>(); 
kernel.Bind<IHandleEvent<SomeEvent>>().To<EventHandler2>(); 
kernel.Bind<IHandleEvent<SomeOtherEvent>>().To<EventHandler3>(); 

Trả lời

4

Gói Tiện ích mở rộng quy ước Ninject thực hiện chính xác những gì tôi cần. Mã làm việc dưới đây:

kernel.Bind(x => x 
    .FromThisAssembly() 
    .SelectAllClasses().InheritedFrom(typeof(IHandleEvent<>)) 
    .BindSingleInterface()); 
Các vấn đề liên quan