Tôi biết trong ba cách như thế nào Eclipse 4 có thể tiêm các đối tượng trong lớp học của bạn:
- Trong start-up thời gian chạy Eclipse tìm kiếm chú thích liên quan trong lớp nó instantiates.
- Đối tượng được tiêm trong 1. được theo dõi và sẽ được tiêm lại nếu được thay đổi.
- Kích hoạt thủ công việc tiêm bằng ContextInjectionFactory và IEclipseContext.
Điều bạn muốn có thể thực hiện được với tùy chọn thứ ba. Here là ví dụ về mã:
ManipulateModelhandler man = new ManipulateModelhandler();
//inject the context into an object
//IEclipseContext iEclipseContext was injected into this class
ContextInjectionFactory.inject(man,iEclipseContext);
man.execute();
Vấn đề là, tuy nhiên; IEclipseContext đã cần được tiêm vào một lớp có thể truy cập đối tượng cần tiêm. Tùy thuộc vào số lần tiêm cần thiết, có thể hữu ích hơn khi sử dụng ủy nhiệm thay vào đó (kiểm thử sẽ là một đối số).
@Inject
public void setFoo(Foo foo) {
//Bar is not attached to the e4 Application Model
bar.setFoo(foo);
}
Do đó, giải pháp tốt hơn có thể là sử dụng chú thích @Creatable. Đơn giản chỉ cần chú thích lớp của bạn và cho nó một hàm tạo không có đối số.
@Creatable
public class Foo {
public Foo() {}
}
Sử dụng @Inject trên loại đó như trong phương pháp trên, sẽ cho phép Eclipse khởi tạo và tiêm nó. Điểm bất lợi là bạn không thể kiểm soát việc tạo đối tượng nữa, như bạn làm với ContextInjectionFactory.inject (..).
Nguồn
2012-12-25 01:22:59
Chỉ cần một lưu ý nhỏ mà hầu hết mọi người có thể muốn xem tiêm javax.inject.Provider vào lớp có chứa yêu cầu các trường hợp tiêm, như là một thay thế cho 3. –
Làm thế nào có thể Tôi nhận được 'IEclipseContext' nếu câu lệnh' ContextInjectionFactory.inject (man, iEclipseContext) 'đang chạy trong một lớp không được định nghĩa trong Mô hình ứng dụng? – kenshinji
@kenshinji Có lẽ [câu trả lời] này (https://stackoverflow.com/questions/18316970/how-to-get-the-ieclipsecontext-in-an-activator/33230722#33230722) sẽ giúp bạn. Nhưng điều quan trọng là chỉ ra rằng điều này sẽ không cho bạn bối cảnh _the_, mà là bối cảnh _a_. Eclipse giữ một cây của các đối tượng bối cảnh, và có hay không một trong số chúng chứa các giá trị bạn cần, tùy thuộc vào trường hợp sử dụng của bạn. Có thể có một cái nhìn tại 'E4Application.createDefaultContext()' là tốt. –