Danh mục

Các giải pháp lập trình CSharp- P11

Số trang: 10      Loại file: pdf      Dung lượng: 2.63 MB      Lượt xem: 13      Lượt tải: 0    
Hoai.2512

Hỗ trợ phí lưu trữ khi tải xuống: 3,000 VND Tải xuống file đầy đủ (10 trang) 0
Xem trước 2 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

Các giải pháp lập trình CSharp- P11: Các giải pháp lập trình C# khảo sát chiều rộng của thư viện lớp .NET Framework và cung cấp giải pháp cụ thể cho các vấn đềthường gặp. Mỗi giải pháp được trình bày theo dạng “vấn đề/giải pháp” một cách ngắn gọn và kèm theo là các ví dụ mẫu.
Nội dung trích xuất từ tài liệu:
Các giải pháp lập trình CSharp- P11 101 Chương 3: Miền ứng dụng, cơ chế phản chiếu, và siêu dữ liệu // Tạo một ListDictionary chứa các plug-in. ListDictionary pluginList = new ListDictionary(); pluginList[SimplePlugin] = CreateInstanceExample; // Tạo một PluginManager trong miền ứng dụng mới // và chỉ định danh sách các plug-in. PluginManager manager2 = (PluginManager)domain1.CreateInstanceAndUnwrap( CreateInstanceExample, PluginManager, true, 0, null, new object[] {pluginList}, null, null, null); // Hiển thị các plug-in đã được nạp vào NewAppDomain2. Console.WriteLine(Plugins in NewAppDomain2:); foreach (string s in manager2.GetPluginList()) { Console.WriteLine( - + s); } // Nhấn Enter để thoát. Console.ReadLine(); }}8. Truyền dữ liệu giữa các miền ứng dụng Bạn cần một cơ chế đơn giản để truyền dữ liệu trạng thái hay cấu hình giữa các miền ứng dụng. Dùng các phương thức SetData và GetData của lớp AppDomain.Dữ liệu có thể được truyền qua các miền ứng dụng như đối số hay trị trả về khi bạn cho gọicác thành viên của các đối tượng hiện có trong các miền ứng dụng. Việc truyền dữ liệu quacác miền ứng dụng được thực hiện dễ dàng giống như truyền dữ liệu trong cùng một miền ứngdụng.Mọi miền ứng dụng đều duy trì một vung đệm dữ liệu (data cache) chứa một tập các cặp“tên/giá trị”. Hầu hết nội dung của vung đệm dữ liệu phản ánh các thiết lập cấu hình của miềnứng dụng, như các giá trị từ đối tượng AppDomainSetup được cung cấp trong quá trình tạomiền ứng dụng (xem mục 3.1). Vung đệm dữ liệu này có thể được sử dụng để trao đổi dữ liệugiữa các miền ứng dụng hay lưu trữ các giá trị tạm thời dùng trong cùng một miền ứng dụng.Phương thức SetData thực hiện việc kết hợp một khóa dạng chuỗi với một đối tượng và lưutrữ nó vào vùng đệm dữ liệu của miền ứng dụng. Phương thức GetData thực hiện công việcngược lại là lấy lại đối tượng từ vùng đệm dữ liệu thông qua khóa. Nếu mã lệnh trong một 102 Chương 3: Miền ứng dụng, cơ chế phản chiếu, và siêu dữ liệumiền ứng dụng gọi phương thức SetData hay GetData để truy xuất vung đệm dữ liệu của miềnứng dụng khác, thì đối tượng dữ liệu phải hỗ trợ ngữ nghĩa marshal-by-value hay marshal-by-reference, nếu không thì ngoại lệ System.Runtime.Serialization.SerializationExceptionsẽ bị ném (xem mục 3.3 để biết thêm chi tiết về cách truyền đối tượng qua các miền ứngdụng). Đoạn mã sau trình bày cách sử dụng phương thức SetData và GetData để truyền mộtSystem.Collections.ArrayList giữa hai miền ứng dụng.using System;using System.Reflection;using System.Collections;public class ListModifier { public ListModifier () { // Nhận danh sách từ đệm dữ liệu. ArrayList list = (ArrayList)AppDomain.CurrentDomain.GetData(People); // Thay đổi danh sách. list.Add(Tam); }}public class PassDataExample { public static void Main() { // Tạo một miền ứng dụng mới. AppDomain domain = AppDomain.CreateDomain(Test); // Tạo một ArrayList và thêm thông tin vào. ArrayList list = new ArrayList(); list.Add(Phuong); list.Add(Phong); list.Add(Nam); // Đặt danh sách vào vùng đệm dữ liệu của miền ứng dụng mới. domain.SetData(People, list); 103 Chương 3: Miền ứng dụng, cơ chế phản chiếu, và siêu dữ liệu // Tạo một ListModifier trong miền ứng dụng mới // sẽ thay đổi nội dung của list trong vùng đệm dữ liệu. domain.CreateInstance(03-08, ListModifier); // Nhận lại danh sách và hiển thị nội dung của nó. foreach (string s in (ArrayList)domain.GetData(People)) { Console.WriteLine(s); } // Nhấn Enter để thoát. Console.ReadLine(); }}9. Giải phóng assembly và miền ứng dụng Bạn cần giải phóng các assembly hay các miền ứng dụng lúc thực thi. Không có cách nào để giải phóng các assembly riêng lẻ. Bạn có thể giải phóng toàn bộ một miền ứng dụng bằng phương thức tĩnh AppDomain.Unload, đồng thời với việc giải phóng miền ứng dụng là tất cả các assembly đã được nạp vào miền ứng dụng đó cũng được giải phóng.Cách duy nhất để giải phóng một assembly là giải phóng cả miền ứng dụng mà nó đã đượcnạp vào. Đáng tiếc, việc giải phóng một miền ứng dụng cũng sẽ giải phóng luôn tất cả cácassembly đã được nạp vào đó. Đây là một giới hạn yêu cầu bạn phải tổ chức và quản lý tốt cấutrúc miền ứng ...

Tài liệu được xem nhiều: