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
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 ...
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ìm kiếm theo từ khóa liên quan:
kinh nghiệm lập trình CSharp mẹo lập trình ngôn ngữ lập trình C giáo trình lập trình CSharp lập trình java lập trình căn bản CSharpTài liệu liên quan:
-
Thủ thuật giúp giải phóng dung lượng ổ cứng
4 trang 217 0 0 -
NGÂN HÀNG CÂU HỎI TRẮC NGHIỆM THIẾT KẾ WEB
8 trang 212 0 0 -
101 trang 202 1 0
-
Tìm hiểu về ngôn ngữ lập trình C: Phần 1 - Quách Tuấn Ngọc
211 trang 150 0 0 -
161 trang 131 1 0
-
142 trang 130 0 0
-
Giáo trình Vi điều khiển PIC: Phần 1
119 trang 120 0 0 -
Bài giảng Phương pháp lập trình: Chương 9 - GV. Từ Thị Xuân Hiền
36 trang 113 0 0 -
Excel add in development in c and c phần 9
0 trang 110 0 0 -
78 trang 103 0 0