96
Chương 3: Miền ứng dụng, cơ chế phản chiếu, và siêu dữ liệu
Gọi phương thức
CreateInstance
hay
CreateInstanceFrom
của đối tượng
AppDomain
đai diên cho miền ứng dụng đích.
Việc sử dụng phương thức
ExecuteAssembly
(đã được thảo luận trong mục 3.6) không mấy
khó khăn; nhưng khi phát triển các ứng dụng phức tạp có sử dụng nhiều miền ứng dụng, chắc
chắn bạn muốn kiểm soát quá trình nạp các assembly, tạo các kiểu dữ liệu, và triệu gọi các
thành viên của đối tượng bên trong miền ứng dụng.
Các phương thức
CreateInstance
và
CreateInstanceFrom
cung cấp nhiều phiên bản nạp
chồng giúp bạn kiểm soát quá trình tạo đối tượng. Các phiên bản đơn giản nhất sử dụng
phương thức khởi dựng mặc định của kiểu, nhưng cả hai phương thức này đều thiết đặt các
phiên bản cho phép bạn cung cấp đối số để sử dụng bất kỳ phương thức khởi dựng nào.
Phương thức
CreateInstance
nạp một assembly có tên xác định vào miền ứng dụng bằng quá
trình đã được mô tả cho phương thức
Assembly.Load
trong mục 3.5. Sau đó,
CreateInstance
tạo đối tượng cho kiểu và trả về một tham chiếu đến đối tượng mới được đóng gói trong
ObjectHandle
(được mô tả trong mục 3.3). Tương tự như thế đối với phương thức
CreateInstanceFrom
; tuy nhiên,
CreateInstanceFrom
nạp assembly vào miền ứng dụng bằng
quá trình đã được mô tả cho phương thức
Assembly.LoadFrom
trong mục 3.5.
AppDomain
cũng cung cấp hai phương thức rất tiện lợi có tên là
CreateInstanceAndUnwrap
và
CreateInstanceFromAndUnwrap
, chúng sẽ tự động khôi
phục tham chiếu đến đối tượng đã được tạo từ đối tượng
ObjectHandle
; bạn phải
ép đối tượng trả về cho đúng kiểu trước khi sử dụng.
Nếu bạn sử dụng
CreateInstance
hay
CreateInstanceFrom
để tạo đối tượng kiểu MBV trong
một miền ứng dụng khác, đối tượng sẽ được tạo nhưng tham chiếu trả về sẽ không chỉ đến đối
tượng đó. Do cách thức đối tượng MBV vượt qua biên miền ứng dụng, tham chiếu này sẽ chỉ
đến một bản sao của đối tượng được tạo tự động trong miền ứng dụng cục bộ. Chỉ khi bạn tạo
một kiểu MBR thì tham chiếu trả về mới chỉ đến đối tượng trong miền ứng dụng khác (xem
mục 3.2 để biết thêm chi tiết về kiểu MBV và MBR).
Kỹ thuật chung để đơn giản hóa việc quản lý các miền ứng dụng là sử dụng lớp điều khiển
(controller class). Một lớp điều khiển là một kiểu MBR tùy biến. Bạn hãy tạo một miền ứng
dụng rồi tạo đối tượng lớp điều khiển trong miền ứng dụng này bằng phương thức
CreateInstance
. Lớp điều khiển hiện thực các chức năng cần thiết cho ứng dụng để thao tác
miền ứng dụng và các nội dung của nó. Các chức năng này có thể bao gồm: nạp assembly, tạo
thêm miền ứng dụng, dọn dẹp trước khi xóa miền ứng dụng, hay liệt kê các phần tử chương
trình (bạn không thể thực hiện ở bên ngoài miền ứng dụng).
Ví dụ dưới đây trình bày cách sử dụng một lớp điều khiển có tên là
PluginManager
. Khi đã
được tạo trong một miền ứng dụng,
PluginManager
cho phép bạn tạo đối tượng của các lớp có
hiện thực giao diện
IPlugin
, chạy và dừng các plug-in đó, và trả về danh sách các plug-in hiện
được nạp.
using System;
using System.Reflection;