Tôi có một tình huống mà tôi muốn phụ thuộc tiêm đối tượng người dùng của tôi, nhưng cũng đặt người dùng hiện tại trong thùng chứa IoC. Tôi muốn các dòng sau vào làm việc:Trong Ninject 2.0, làm thế nào để tôi có cả một ràng buộc chung và một ràng buộc cho một trường hợp specfic?
kernel.Get<User>(); // Should return a new User()
kernel.Get<User>("Current"); // Should return the current user
Người ta có thể nghĩ rằng các ràng buộc như thế này sẽ làm việc:
Bind<User>().ToSelf();
Bind<User>().ToMethod(LoadCurrentUser).InRequestScope().Named("Current");
Tất nhiên, cung cấp cho:
Ninject.ActivationException: Error activating User More than one matching bindings are available. Activation path: 1) Request for User Suggestions: 1) Ensure that you have defined a binding for User only once.
Tôi hiểu lỗi từ một Đặt tên ràng buộc không hạn chế việc áp dụng ràng buộc đó, do đó, cả hai ràng buộc áp dụng. Có vẻ như rõ ràng rằng tôi cần phải sử dụng ràng buộc theo ngữ cảnh với các phương thức .When *() nhưng tôi không thể nghĩ ra cách nào để làm điều đó. Tôi cảm thấy như cần có khi phương pháp phát hiện liệu một trường hợp được đặt tên có được áp dụng hay không. Một cái gì đó như:
// Not valid Ninject syntax
Bind<User>().ToSelf().WhenUnnamedRequested();
Bind<User>().ToMethod(LoadCurrentUser).WhenNamedRequested().InRequestScope().Named("Current");
Tôi không thể tìm thấy bất kỳ địa điểm nào trên giao diện IRequest
hoặc thuộc tính của nó cho tôi biết tên được yêu cầu. Làm thế nào để tôi làm điều này?
Xin lỗi vì sự chậm trễ dài để đáp ứng, tôi không thể làm một trong những bởi vì khi một người dùng mới đang được yêu cầu, mà đang xảy ra thông qua NHibernate. Vì vậy, tôi không thể thêm tên hoặc thuộc tính vào đó. Tôi có thể trong các trường hợp mà tôi muốn người dùng hiện tại, nhưng sau đó ràng buộc người dùng mới sẽ vẫn áp dụng. –