CÁC GIẢI PHÁP LẬP TRÌNH C# - Trang 91

91

Chương 3: Miền ứng dụng, cơ chế phản chiếu, và siêu dữ liệu

// Hiện thực các thành viên ở đây.

§

}

3.

3.

Tránh n p các assembly không c n thi t vào mi n ng d ng

ế

ề ứ

Tránh n p các assembly không c n thi t vào mi n ng d ng

ế

ề ứ

Bạn cần chuyển một tham chiếu đối tượng qua lại giữa các miền ứng dụng khác
nhau; tuy nhiên, bạn không muốn CLR
nạp siêu dữ liệu mô tả kiểu của đối
tượng vào các miền ứng dụng trung gian.

Đóng gói tham chiếu đối tượng trong một

System.Runtime.Remoting.ObjectHandle

và khi cần truy xuất đối tượng thì khôi phục lại.

Khi bạn truyền một đối tượng marshal-by-value (MBV) qua các miền ứng dụng, bộ thực thi sẽ
tạo một thể hiện mới của đối tượng này trong miền ứng dụng đích. Điều này có nghĩa là bộ
thực thi phải nạp assembly chứa siêu dữ liệu mô tả kiểu của đối tượng vào các miền ứng dụng.
Do đó, việc truyền các tham chiếu MBV qua các miền ứng dụng trung gian sẽ dẫn đến việc bộ
thực thi nạp các assembly không cần thiết vào các miền ứng dụng này. Một khi đã được nạp
thì các assembly thừa này sẽ không được giải phóng khỏi miền ứng dụng nếu không giải
phóng cả miền ứng dụng chứa chúng (xem mục 3.9).
Lớp

ObjectHandle

cho phép bạn đóng gói tham chiếu đối tượng để truyền qua các miền ứng

dụng mà bộ thực thi không phải nạp thêm assembly. Khi đối tượng này đến miền ứng dụng
đích, bạn có thể khôi phục tham chiếu đối tượng, bộ thực thi sẽ nạp các assembly cần thiết và
cho phép bạn truy xuất đến đối tượng như bình thường. Để đóng gói một đối tượng (ví dụ

System.Data.DataSet

), bạn có thể thực hiện như sau:

// Tạo một DataSet mới.

System.Data.DataSet data1 = new System.Data.DataSet();

// Cấu hình/thêm dữ liệu cho DataSet.

§

// Đóng gói DataSet.

System.Runtime.Remoting.ObjectHandle objHandle =

new System.Runtime.Remoting.ObjectHandle(data1);

Để khôi phục một đối tượng, sử dụng phương thức

ObjectHandle.Unwrap

và ép kiểu trả về cho

phù hợp, ví dụ:

// Khôi phục DataSet từ ObjectHandle.

System.Data.DataSet data2 =

(System.Data.DataSet)objHandle.Unwrap();

Liên Kết Chia Sẽ

** Đây là liên kết chia sẻ bới cộng đồng người dùng, chúng tôi không chịu trách nhiệm gì về nội dung của các thông tin này. Nếu có liên kết nào không phù hợp xin hãy báo cho admin.