Tôi muốn tạo một Mô-đun tự động liên kết các cá thể với các chú thích được đặt tên. Trường hợp sử dụng là tôi muốn tự động ràng buộc các giá trị trong cấu hình của tôi với khóa trong tệp thuộc tính là giá trị @Named.Làm thế nào để bạn thực hiện các liên kết động trong Guice mà yêu cầu một Instance tiêm?
Tuy nhiên cấu hình bị ràng buộc trong một mô-đun khác vì vậy tôi cần cấu hình để được tiêm. Giải pháp mà tôi đã xem xét là:
Ràng buộc trong phương thức configure(). Phương pháp này không được tiêm vào và tôi không thể lấy cấu hình cơ bản.
Sử dụng nhà cung cấp/@ Cung cấp. Nhà cung cấp chỉ liên kết một trường hợp duy nhất.
Sử dụng MultiBinder. Trường hợp sử dụng của tôi hơi khác một chút, những gì được cung cấp bởi tiện ích mở rộng này. Multi-binding cho phép bạn liên kết nhiều cá thể một cách riêng biệt và sau đó chúng được tiêm như một Bộ sưu tập kiểu chứa phức tạp hơn. Tôi muốn ràng buộc từng cá thể riêng biệt và có chúng bằng cách nhận dạng duy nhất để tiêm sau này.
Sử dụng childInjector. Thật không may điều này là không thể mà không có một số sửa đổi rộng rãi của mã hiện có. This answer là một mô tả rất tốt về cách giải quyết vấn đề này theo cách này.
Tiêm chất kết dính bằng cách nào đó. (Tôi bắt đầu nhận được một chút tin tặc) Guice cho phép tiêm Injector để sử dụng sau, tôi đã thử tiêm Binder vào Module mặc dù phương thức @Provides và sau đó sử dụng trực tiếp liên kết để tạo nhiều liên kết trong phương thức. Guice sẽ không tiêm chất kết dính.
Một câu trả lời hay khác, cảm ơn! Tôi không biết về phương thức Names.bindProperties(), tôi sẽ phải lưu nó cho sau này. Tôi đã thử các giải pháp bạn đề xuất trong 2 đêm qua và nó chủ yếu là làm việc, mặc dù không phải là sạch sẽ tôi đã có thể thích nó. Về cơ bản tôi đã đi đến kết luận rằng những gì tôi thực sự muốn làm nằm ngoài thiết kế của Guice. Tôi không sở hữu khuôn khổ mà tôi đang triển khai và tôi không tin rằng những người tiêm chích trẻ em sẽ là một tính năng có sẵn bất kỳ lúc nào, vì vậy tôi sẽ làm lại cấu hình của mình một chút khác biệt. Cảm ơn bạn đã trả lời nhanh chóng! –