2010-08-01 27 views
5

Trong trường hợp của tôi, tôi muốn thực hiện một phương thức trong một AppDomain riêng biệt. Có bao nhiêu cách khác nhau tôi có thể thực hiện để đạt được điều này?Làm thế nào để chạy một phương thức trong một AppDomain riêng biệt?

Đặc biệt, tôi có những câu dưới đây:

  • Tôi có thể nạp một assembly vào AppDomain A và thực hiện phương pháp của nó trong AppDomain B?
  • Dường như tôi đạt được điều này với AppDomain.DoCallBack MethodCrossAppDomainDelegate. Tôi chỉ không thể tìm ra làm thế nào nó có thể có ý nghĩa để có lắp ráp và phương pháp trong AppDomains khác nhau. Là cùng một assmebly nạp một lần nữa vào AppDomain khác để thực hiện phương pháp?

Trả lời

5

Để thực thi mã trong một AppDomain riêng biệt, lắp ráp chứa mã đó phải được tải vào AppDomain đó. Từ đó bạn có thể gọi một phương thức trong AppDomain thứ hai từ miền lưu trữ của bạn bằng cách sử dụng các phương thức phản chiếu hoặc "CreateInstance" trên lớp AppDomain.

Xin lưu ý, AppDomain là ranh giới cứng. Để giao tiếp qua các ranh giới AppDomain, bạn sẽ cần phải sử dụng từ xa hoặc một cơ chế IPC-ish thực sự.

Đây là một chút ngày, nhưng tôi tin rằng nó vẫn được áp dụng. http://blogs.msdn.com/b/suzcook/archive/2003/06/12/57169.aspx

Suzanne Cook có một loạt bài đăng liên quan đến chủ đề này để có thể xem xét lưu trữ của cô ấy một chút.

Kiểm tra họ "CreateInstance" của các phương thức trên lớp AppDomain. Trong quá khứ tôi đã sử dụng CreateInstanceFromAndUnwrap() khá một chút cho loại tình huống này.

Theo như câu hỏi của bạn về có bao nhiêu cách để làm điều này ... Um, nhiều, nhưng nó phụ thuộc rất nhiều vào tình hình chính xác và những đối tượng bạn có trong tay.

1

Thêm vào câu trả lời chính xác của Rob, tôi muốn đề cập đến bất kỳ nỗ lực gọi nào mà không sử dụng phản chiếu sẽ khiến cho hội nhập được tải vào AppDomain gọi của bạn, đó cũng có thể là những gì bạn đang cố tránh.

Các vấn đề liên quan