Tôi sử dụng Lâu đài Windsor khá lâu rồi. Nó chỉ là hoàn hảo cho môi trường nơi dữ liệu được đặt trong một cơ sở dữ liệu hoặc tương tự, nơi mà mô hình kho lưu trữ hoặc mô hình unitofwork hoạt động tốt.Windsor Castle/DI và mô hình đối tượng
Bây giờ tôi có một tình huống khác: Tôi có một mô hình đối tượng phức tạp được lắp ráp bởi rất nhiều PONO đơn lẻ. Môi trường bị ảnh hưởng mạnh mẽ bởi COM, để làm cho nó rõ ràng hơn: Excel, Word PIOs được sử dụng nhiều.
Tôi sử dụng mẫu lệnh, tôi đã triển khai ICommandHandler như mô tả here nhưng có một sự khác biệt. Vì tôi muốn lắp ráp các lệnh vào một danh sách các lệnh để gọi chúng trong một lần chạy mà không biết bất cứ điều gì bên cạnh mẫu lệnh chung được mô tả, nó không đưa ra giới thiệu ngữ cảnh khi gọi phương thức thực thi. Giao diện trông giống như thế này:
public interface ICommand
{
void Execute();
bool CanExecute();
}
Thực hiện các lệnh với giao diện đó có hiệu quả và dễ hiểu. Mặt khác, nó là một vấn đề để giới thiệu bối cảnh với ctor vì vì vậy Container phải được gọi một cách rõ ràng để ví dụ. thêm tham số ctor.
Vì vậy, tôi thực sự có hai câu hỏi:
- Có thể tiêm một - chúng ta hãy gọi nó là một bối cảnh, một phần của mô hình đối tượng - tự động bởi Windsor lâu đài mà không gọi container explictely?
- Cách tham gia từ mẫu lệnh bằng cách sử dụng DI? Bất kỳ ý tưởng làm thế nào để hoàn thành việc có thể xác định một danh sách các nhiệm vụ/hành động hoặc tương tự bằng cách làm theo quy tắc RRR được mô tả here?
Bạn liên kết đến mô tả mẫu lệnh/trình xử lý (sử dụng 'ICommandHandler'), nhưng thực tế bạn đang sử dụng Mẫu lệnh, điều này hoàn toàn khác, vì các lệnh trong mẫu lệnh/trình xử lý là DTO không có hành vi, và chúng không chứa phương thức 'Execute'. Có một phương thức 'Execute' trên chúng sẽ vô hiệu hóa hầu hết các khả năng mà mẫu lệnh/handler mang lại. Các vấn đề với việc tiêm phụ thuộc vào các lệnh sẽ biến mất khi bạn đưa các phụ thuộc vào các trình xử lý. Trong mẫu lệnh/handler, các lệnh không có bất kỳ phụ thuộc nào (vì chúng không có bất kỳ hành vi nào). –
Steven
Cảm ơn câu trả lời, Steven. Bạn chắc chắn đúng, tôi có thể tiêm chúng vào bộ xử lý. Nhưng điều đó không giải quyết được vấn đề, do tôi vẫn phải tiêm cùng một thông tin và gọi vùng chứa để làm cho dữ liệu của tôi có sẵn cho trình xử lý. Nó sẽ không thể thực hiện các lệnh batch và thực hiện chúng trong một hàng. Tôi đã nhận được bất cứ điều gì sai? –