Tôi có hai dự án. ProjectA có một lớp được gọi là Task và projectB có class gọi là Transmission. Tôi muốn rằng bất cứ khi nào truyền được thay đổi - một cái gì đó sẽ xảy ra trong Task và bất cứ khi nào Task được thay đổi - điều gì đó sẽ xảy ra trong Transmission.tương tác giữa các dự án
Đối với điều đó tôi đã tạo một dự án khác được gọi là Chung nơi cả ProjectA và projectB sẽ có tham chiếu đến. Nói chung, tôi đặt tất cả các giao diện để tương tác giữa cả hai thực thể.
Trong dự án chung tôi tạo giao diện được gọi là IManager mà ProjectA sẽ triển khai. Vai trò của người quản lý là xử lý các bản cập nhật. Giao diện nhìn như thế này:
public interface IManager
{
ITaskChangedHandler TaskChangedHandler { set; }
void OnTransmissionChanged(ITransmissionWithTasks transmission);
}
Giao diện này có 2 phương pháp PROJECTA có để thực hiện:
void OnTransmissionChanged(ITransmissionWithTasks transmission);
Khi có sự thay đổi trong quá trình truyền (bên ProjectB) phương pháp này được gọi là để thực hiện cập nhật trong các tác vụ.ITaskChangedHandler TaskChangedHandler { set; }
Việc triển khai IManager phải được thiết lập cho ITaskChangedHandler. ITaskChangedHandler là một giao diện định nghĩa một phương pháp để truyền tải bản cập nhật trong trường hợp nhiệm vụ được thay đổi:public interface ITaskChangedHandler { void OnTaskChanged(string moduleName, ITask task, long transmissionId); }
Bây giờ, nó đi như thế này:
PROJECTA có thực hiện để iManager.
Bất cứ khi nào có một cahnge trong truyền tôi sử dụng StructureMap nhận thể hiện của thực hiện iManager và sau đó gọi
OnTransmissionChanged();
Đây là vấn đề của tôi - Bất cứ khi nào có sự thay đổi trong công tác (trong PROJECTA) Tôi muốn hãy gọi số
TaskChangedHandler.OnTaskChanged()
của IManager. Nhưng vấn đề là trường hợp triển khai IManager không đặt TaskChangedHandler.
Tôi cũng không biết nơi tôi nên đặt TaskChangedHandler này:này không thể ở trong PROJECTA vì nó không biết việc thực hiện ITaskChangedHandler.
Điều này không thể ở trong ProjectB vì việc tạo triển khai IManager xảy ra trong ProjectA, do đó, tập hợp phải nằm trong projectA.
Điều này không thể nằm trong Dự án chung vì nó không biết triển khai của IManager và ITaskChangedHandler.
Ai có thể giúp tôi giải quyết vấn đề này?
Bạn nghĩ gì là tốt hơn - sử dụng trình trung gian tĩnh (hoặc không tĩnh) hoặc sử dụng cả hai cách với tiêm phụ thuộc? – Naor
Sau suy nghĩ thứ hai - người hòa giải này phải tĩnh. Mỗi dự án phải đăng ký các sự kiện và nếu nó không tĩnh thì sẽ không có cá thể nào để đăng ký. Tôi có đúng không? – Naor
Không có gì phải là tĩnh nếu bạn sử dụng một singleton thông qua tiêm phụ thuộc, bạn chỉ có thể 'Nhận' (ví dụ) và nhận được cùng một ví dụ trở lại. Tĩnh là khá xấu trong quan điểm của tôi. Người hòa giải sẽ phải tự đăng ký trước khi sử dụng nó. Điều đó nói rằng, bạn sẽ không cần một người hòa giải sử dụng DI, bởi vì nhiệm vụ có thể đăng ký chính nó như là việc triển khai ITask, truyền tải như truyền tải, và cả hai có thể truy cập lẫn nhau bằng DI ..? –