Tôi có một giao diện chung IRepository<T>
và hai triển khai xrmRepository<T>
và efRepository<T>
Ninject theo ngữ cảnh Binding w/Open Generics
Tôi muốn thay đổi các ràng buộc dựa trên T
, cụ thể hơn sử dụng xrmRepository
khi T
xuất phát từ Entity
. Làm thế nào tôi có thể thực hiện điều đó?
Tôi hiện có:
kernel.Bind(typeof(IRepository<>)).To(typeof(efRepository<>)).InRequestScope();
kernel.Bind(typeof(IRepository<>)).To(typeof(xrmRepository<>)).When(request => request.Service.GetGenericArguments()[0].GetType().IsSubclassOf(typeof(Entity))).InRequestScope();
Nhưng khi tôi cố gắng giải quyết IRepository<Contact>
nó đi để efRepository, mặc dù Liên hệ thừa hưởng Entity.
Tôi không muốn sử dụng Ràng buộc có tên khác nếu không, tôi sẽ phải thêm tên ở mọi nơi.
Không hoạt động bằng lớp cơ sở "Pháp nhân". Vẫn còn ràng buộc với efRepository. Không hoạt động nếu sử dụng chính lớp đó (như Liên hệ). –
Bạn có muốn phân giải IRepository thành xrmRepository cho tất cả các lớp con của Thực thể không? – treze
Đúng! Nhưng tôi có lẽ sẽ kết thúc việc tạo ra một IXRMRepository: IRepository thay vì kể từ khi tôi không thể làm cho nó hoạt động. –