Miền ứng dụng ,cơ chế phản chiếu và siêu dữ liệu phần 2
Số trang: 10
Loại file: pdf
Dung lượng: 157.78 KB
Lượt xem: 9
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:
Bạn cần thực thi một assembly ở một miền ứng dụng khác với miền ứng dụng hiện hành. Gọi phương thức ExecuteAssembly của đối tượng AppDomain đại diện cho miền ứng dụng, và chỉ định tên của assembly cần thực thi.
Nội dung trích xuất từ tài liệu:
Miền ứng dụng ,cơ chế phản chiếu và siêu dữ liệu phần 2 1.1 Thực thi assembly ở miền ứng dụng khác Bạn cần thực thi một assembly ở một miền ứng dụng khác với miền ứng dụng hiện hành. Gọi phương thức ExecuteAssembly của đối tượng AppDomain đại diện cho miền ứng dụng, và chỉ định tên của assembly cần thực thi.Nếu bạn có một assembly khả-thực-thi và muốn nạp để thực thi nó trong một miền ứngdụng, phương thức ExecuteAssembly sẽ giúp bạn. Phương thức ExecuteAssembly có bốndạng thức khác nhau. Dạng thức đơn giản nhất chỉ nhận vào một kiểu string chứa tên củaassembly cần thực thi; bạn có thể chỉ định một file cục bộ hay một URL. Một dạng thứckhác cho phép bạn chỉ định chứng cứ (evidence) cho assembly (xem mục 13.10) và cácđối số để truyền đến điểm nhập của assembly (tương đương với các đối số dòng lệnh).Phương thức ExecuteAssembly nạp assembly được chỉ định và thực thi phương thứcđược định nghĩa trong siêu dữ liệu là điểm nhập của assembly (thường là phương thứcMain). Nếu assembly được chỉ định không có khả năng thực thi, ExecuteAssembly sẽném ngoại lệ System.Runtime.InteropServices.COMException. Bộ thực thi không thựcthi assembly trong một tiểu trình mới, vì thế quyền kiểm soát sẽ không trả về cho đến khiquá trình thực thi của assembly kết thúc. Do ExecuteAssembly nạp một assembly bằngtên riêng phần (chỉ có tên file), CLR sẽ không dùng GAC hay probing để tìm assembly(xem mục 3.5 để biết thêm chi tiết).Ví dụ dưới đây trình bày cách sử dụng phương thức ExecuteAssembly để nạp và thực thimột assembly. Lớp ExecuteAssemblyExample tạo một AppDomain và thực thi chính nótrong AppDomain bằng phương thức ExecuteAssembly. Kết quả là có hai bản sao củaExecuteAssemblyExample được nạp vào hai miền ứng dụng khác nhau.using System;public class ExecuteAssemblyExample {public static void Main(string[] args) { // Nếu assembly đang thực thi trong một AppDomain // có tên thân thiện là NewAppDomain // thì không tạo AppDomain mới. Điều này sẽ // tránh một vòng lặp vô tận tạo AppDomain. if (AppDomain.CurrentDomain.FriendlyName != NewAppDomain) { // Tạo miền ứng dụng mới có tên là NewAppDomain. AppDomain domain = AppDomain.CreateDomain(NewAppDomain); // Thực thi assembly này trong AppDomain mới và // truyền mảng các đối số dòng lệnh. domain.ExecuteAssembly(ExecuteAssemblyExample.exe, null, args); } // Hiển thị các đối số dòng lệnh lên màn hình // cùng với tên thân thiện của AppDomain. foreach (string s in args) { Console.WriteLine(AppDomain.CurrentDomain.FriendlyName + : + s); } }} 1.2 Thể hiện hóa một kiểu trong miền ứng dụng khác Bạn cần thể hiện hóa một kiểu trong một miền ứng dụng khác với miền ứng dụng hiện hành. Gọi phương thức CreateInstance hay CreateInstanceFrom của đối tượng AppDomain đại 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ôngmấ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 ứngdụ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ạpchồ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ụngphươ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 đặtcá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ựngnà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ằngquá 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ớiphươ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ục3.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 MBVtrong 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ôngchỉ đến đối tượng đó. Do cách thức đối tượng MBV vượt qua biên miền ứng dụng, thamchiế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ụngcụ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 trongmiền ứng dụng khác (xem mục 3.2 ...
Nội dung trích xuất từ tài liệu:
Miền ứng dụng ,cơ chế phản chiếu và siêu dữ liệu phần 2 1.1 Thực thi assembly ở miền ứng dụng khác Bạn cần thực thi một assembly ở một miền ứng dụng khác với miền ứng dụng hiện hành. Gọi phương thức ExecuteAssembly của đối tượng AppDomain đại diện cho miền ứng dụng, và chỉ định tên của assembly cần thực thi.Nếu bạn có một assembly khả-thực-thi và muốn nạp để thực thi nó trong một miền ứngdụng, phương thức ExecuteAssembly sẽ giúp bạn. Phương thức ExecuteAssembly có bốndạng thức khác nhau. Dạng thức đơn giản nhất chỉ nhận vào một kiểu string chứa tên củaassembly cần thực thi; bạn có thể chỉ định một file cục bộ hay một URL. Một dạng thứckhác cho phép bạn chỉ định chứng cứ (evidence) cho assembly (xem mục 13.10) và cácđối số để truyền đến điểm nhập của assembly (tương đương với các đối số dòng lệnh).Phương thức ExecuteAssembly nạp assembly được chỉ định và thực thi phương thứcđược định nghĩa trong siêu dữ liệu là điểm nhập của assembly (thường là phương thứcMain). Nếu assembly được chỉ định không có khả năng thực thi, ExecuteAssembly sẽném ngoại lệ System.Runtime.InteropServices.COMException. Bộ thực thi không thựcthi assembly trong một tiểu trình mới, vì thế quyền kiểm soát sẽ không trả về cho đến khiquá trình thực thi của assembly kết thúc. Do ExecuteAssembly nạp một assembly bằngtên riêng phần (chỉ có tên file), CLR sẽ không dùng GAC hay probing để tìm assembly(xem mục 3.5 để biết thêm chi tiết).Ví dụ dưới đây trình bày cách sử dụng phương thức ExecuteAssembly để nạp và thực thimột assembly. Lớp ExecuteAssemblyExample tạo một AppDomain và thực thi chính nótrong AppDomain bằng phương thức ExecuteAssembly. Kết quả là có hai bản sao củaExecuteAssemblyExample được nạp vào hai miền ứng dụng khác nhau.using System;public class ExecuteAssemblyExample {public static void Main(string[] args) { // Nếu assembly đang thực thi trong một AppDomain // có tên thân thiện là NewAppDomain // thì không tạo AppDomain mới. Điều này sẽ // tránh một vòng lặp vô tận tạo AppDomain. if (AppDomain.CurrentDomain.FriendlyName != NewAppDomain) { // Tạo miền ứng dụng mới có tên là NewAppDomain. AppDomain domain = AppDomain.CreateDomain(NewAppDomain); // Thực thi assembly này trong AppDomain mới và // truyền mảng các đối số dòng lệnh. domain.ExecuteAssembly(ExecuteAssemblyExample.exe, null, args); } // Hiển thị các đối số dòng lệnh lên màn hình // cùng với tên thân thiện của AppDomain. foreach (string s in args) { Console.WriteLine(AppDomain.CurrentDomain.FriendlyName + : + s); } }} 1.2 Thể hiện hóa một kiểu trong miền ứng dụng khác Bạn cần thể hiện hóa một kiểu trong một miền ứng dụng khác với miền ứng dụng hiện hành. Gọi phương thức CreateInstance hay CreateInstanceFrom của đối tượng AppDomain đại 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ôngmấ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 ứngdụ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ạpchồ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ụngphươ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 đặtcá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ựngnà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ằngquá 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ớiphươ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ục3.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 MBVtrong 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ôngchỉ đến đối tượng đó. Do cách thức đối tượng MBV vượt qua biên miền ứng dụng, thamchiế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ụngcụ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 trongmiền ứng dụng khác (xem mục 3.2 ...
Tìm kiếm theo từ khóa liên quan:
công nghệ thông tin kĩ thuật lập trình ngôn ngữ lập trình ngôn ngữ C# C# Miền ứng dụng cơ chế phản chiếu và siêu dữ liệu phần 2Gợi ý tài liệu liên quan:
-
52 trang 429 1 0
-
Top 10 mẹo 'đơn giản nhưng hữu ích' trong nhiếp ảnh
11 trang 311 0 0 -
74 trang 294 0 0
-
96 trang 290 0 0
-
Báo cáo thực tập thực tế: Nghiên cứu và xây dựng website bằng Wordpress
24 trang 288 0 0 -
Đồ án tốt nghiệp: Xây dựng ứng dụng di động android quản lý khách hàng cắt tóc
81 trang 278 0 0 -
EBay - Internet và câu chuyện thần kỳ: Phần 1
143 trang 272 0 0 -
Giáo trình Lập trình hướng đối tượng: Phần 2
154 trang 271 0 0 -
Tài liệu dạy học môn Tin học trong chương trình đào tạo trình độ cao đẳng
348 trang 269 1 0 -
Bài thuyết trình Ngôn ngữ lập trình: Hệ điều hành Window Mobile
30 trang 262 0 0