1. Trang chủ
  2. » Công Nghệ Thông Tin

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

10 372 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 10
Dung lượng 2,63 MB

Nội dung

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ạ ầ ế ề ứ ụ   #eAJwAJ>Z]tAOIQQ>cOJ>@jZLK@QVWAB‚ZcYe@B@?cJSJO@GA~ABhUABs>SJ A>cZ‹QZ]A>@CAFeAs>TABOZKA  CLR  Aedf@CZh?Y@qZOTQRs@tZJbcLK@ QVWABD\XJSJO@GA~ABhUABQHZABB@cA(   !^ABB^@Q>cOJ>@jZLK@QVWABQHXABOIQ System.Runtime.Remoting.ObjectHandle D\s>@JwAQHZ]vZPQLK@QVWABQ>ls>T@d>UJYe@( w&*'.D$marshal-by-valuegMBVh9.:)8&=@ *..D$'.:)2l'Fq& =*(.&':>)K.4D$.:) UF8'.IMBV9.:)@)3I& =*(.&'4NI.:)'"S$* %(.&'Q'@4$FV.:)I4 F.:):Gg;(..^ch y ObjectHandle X&*FF.ID$'9.: ).&=4*>.(.&'wD$'I.:) 28&*F4.ID$8&=@*(.&'NI X&*';ID$&% lFF.D$g2) System.Data.DataSet h8&*F=\ // 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); l4.D$8O)M: ObjectHandle.Unwrap X e$82)\ // Khôi phục DataSet từ ObjectHandle. System.Data.DataSet data2 = (System.Data.DataSet)objHandle.Unwrap(); 92 Chương 3: Miền ứng dụng, cơ chế phản chiếu, và siêu dữ liệu 4. 4. T o ki u không th v t qua biên mi n ng d ngạ ể ể ượ ề ứ ụ T o ki u không th v t qua biên mi n ng d ngạ ể ể ượ ề ứ ụ   #eAJwAQeXOIQs@tZh?Y@qZfcXJ>XJSJQ>t>@qAJbcs@tZA\]s>TABQ>tLVWJ QHZ]vZPQQƒO}YqA>‰JSJO@GA~ABhUABs>SJ(   >R@J>{JJ>{As@tZh?Y@qZQ>ZIJheAB nonremotable Q~JY\s>TABQ>tQZwAQn >^cJ“ABA>Vs>TABhpAvZPQQƒYEd MarshalByRefObject ( l4&*.D)KFJ$*';*..: )l*)K)*nonremotable8/5'4z Nz=zF?4)3;g=I'IhQ  MarshalByRefObject  HK'@.&5*D$4$';Q .:)gD$'4$O).DD'i  0M:>.:)h l)K4zNz=zF$=)r)). 4QIvN=FQFl&..4 zNz=zF8&*//5!2  System.SerializableAttribute  4 $)& L*NB.&.4$'&5.IH  .NET )3;=I'IQ  MarshalByRefObject T&*x6 4)3 ;&*Q'HK MC4))3;Q MarshalByRefObject  &  t.\  System.ComponentModel.Component 8  System.IO.Stream 8 System.IO.TextReader 8  System.IO.TextWriter 8  System.NET.WebRequest 8    System.Net. WebResponse g;(..NET Framework SDK F)¯°¤‘¯±‘)3;Q MarshalByRefObject h 5. 5. N p assembly vào mi n ng d ng hi n hànhạ ề ứ ụ ệ N p assembly vào mi n ng d ng hi n hànhạ ề ứ ụ ệ   #eAJwAAedOIQcff†OFY]D\XO@GA~ABhUABY•JQ>nJQ>@(   g  hUAB  d>V[AB  Q>~J  Q„A>  Load  >c]  LoadFrom  Jbc  YEd System.Reflection.Assembly ( L==*(.&'.(.&'&*.IIG&>)i7' >8&*?FJi&=*(.&'PM:  Load   LoadFrom =.4*.(.&'.:)8 .D$ Assembly .4(.&'Q$*|=&K M:)DD$6)*(.&'N*8 :&=ii(.&'' RM: Load )*:XJi(.&'N*8&*F O).K)*\ • " string :>N''>œ•ž–˜‘²¥°–‘¯³‘6)*(.&' 93 Chng 3: Min ng dng, c ch phn chiu, v siờu d liu " System.Reflection.AssemblyName .4I(.&' ".&'(:)KÊƠ Ơ(.&' 74 8 > (.&' $ O) * (.&' 7> N' . (.&'&t.\>8>&8ăàảê8(F48$<&C) x' g2 )\ System.Data, Version=1.0.5000.0, Culture=neutral, PublicKeyToken= b77a5c561934e089 h l J i . (.&' 4 F > .*8 O ) PublicKeyToken=null L*?FO)>/6)*.(.&'2 >(.&'g4FN.Chl*.S)<'%&' O)M: Load \ // Np assembly System.Data dựng tờn y . string name1 = "System.Data,Version=1.0.5000.0," + "Culture=neutral,PublicKeyToken=b77a5c561934e089"; Assembly a1 = Assembly.Load(name1); // Np assembly System.Xml dựng AssemblyName. AssemblyName name2 = new AssemblyName(); name2.Name = "System.Xml"; name2.Version = new Version(1,0,5000,0); name2.CultureInfo = new CultureInfo(""); name2.SetPublicKeyToken( new byte[] {0xb7,0x7a,0x5c,0x56,0x19,0x34,0xe0,0x89}); Assembly a2 = Assembly.Load(name2); // Np assembly SomeAssembly dựng tờn ngn. Assembly a3 = Assembly.Load("SomeAssembly"); wM: Load $08&==9%ii*(.&'U <'@F./9%'T&* NET Framework SDK&I>. I Z HI&*Ji(.&'>.*8M: Load @) version policy g2>&hpublisher policyg2hƠãƠáạƠà ằƠÊÔĐẳẵơơắĐƠăàêơăÔạƠĂVersionpolicy $ J i f( % .' 2 ' : ) &* &5 N O <bindingRedirect> Publisher policy$JiêơăÔă$ !&>GACgGlobal Assembly Cacheh ] "S;iG>&(.&'NO)8&=@D/ *(.&'>.*QGAC ^ HI(.&'4F>.*!4$%.'GAC8&=@ %. NO <codeBase> f( % .' 2 : ) RN O <codeBase> ;*>(.&'.f('.URLHI(.&'F> .*8 <codeBase> FJI&i2URL)=z>z((TI 94 Chng 3: Min ng dng, c ch phn chiu, v siờu d liu 48 <codeBase> JI -ảMD.: )HI(.&'4t*i2$Ji8M: Load @X. * System.IO.FileNotFoundException _ HI4FNO <codeBase> M:(.&'8&=@%.(.&' &56probingY%probing@%.f(N>F>(.&'g N.Cdll'exehi2\ 7.D:) P.ãê.De$>ăàảê(.&' ặƠâãẵêƠâầắãâẩẫƠấảƠĂ RM: Load )r%.*(.&'8?FD 2)k.%.(.&'F>'IRM: LoadFrom X&**(.&'Q.i2;i8I4%.'F@X. * FileNotFoundException L=@4D%.(.&'M: Load EM: LoadFrom 4#$GAC8policy8NO <codeBase> 'probingU <'*.S%&'O) LoadFrom *c:\shared\MySharedAssembly.dlly B58 Load 8 LoadFrom '>N&*JiN.Cf((.&' // Np assembly cú tờn l c:\shared\MySharedAssembly.dll Assembly a4 = Assembly.LoadFrom(@"c:\shared\MySharedAssembly.dll"); 6. 6. Th c thi assembly mi n ng d ng khỏc Th c thi assembly mi n ng d ng khỏc #eAJwAQ>nJQ>@OIQcffOFY]OIQO@GA~ABhUABs>SJO@GA~ABhUAB >@qA>\A>( @d>V[ABQ>~J ExecuteAssembly JbcLK@QVWAB AppDomain ĂÂÊÔƠ O@GA ~ABhUABD\J>LMA>QCAJbccffOFY]JwAQ>nJQ>@( HI&*F.(.&'z=z.D*=F :)8 M: ExecuteAssembly @G&*RM: ExecuteAssembly F&D)*: U*:MJ6. string :>(.&'N =T&*FJi.f(&'.URL")*:X&* Ji::gevidenceh(.&'g;( Z^ZdhDD'I. 6(.&'gMMDD)kh RM: ExecuteAssembly *(.&'$Ji=M:$i q>)K.6(.&'g M: Main hHI (.&'$Ji 4 Fv =8 ExecuteAssembly @X.* System.Runtime.InteropServices.COMException L=4=(.&' .%.8%I9'.@4I9%= (.&'IGU ExecuteAssembly *.(.&'&5>ƠgJF> f(h8CLR@4)eGAC'probing%.(.&'g;( ^`&I>. Ih 95 Chương 3: Miền ứng dụng, cơ chế phản chiếu, và siêu dữ liệu u2))<'%&'O)M: ExecuteAssembly *=. (.&' y  ExecuteAssemblyExample  * .  AppDomain    =   2 F  AppDomain  &5  M  :  ExecuteAssembly   wI  9    F    &     ExecuteAssemblyExample $*.:) 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); } } } 7. 7. Th hi n hóa m t ki u trong mi n ng d ng khácể ệ ộ ể ề ứ ụ Th hi n hóa m t ki u trong mi n ng d ng khácể ệ ộ ể ề ứ ụ   #eAJwAQ>t>@qA>^cOIQs@tZQHXABOIQO@GA~ABhUABs>SJ š›œ •O@GA~AB hUAB>@qA>\A>( 96 Chương 3: Miền ứng dụng, cơ chế phản chiếu, và siêu dữ liệu   •@  d>V[AB  Q>~J  CreateInstance  >c]  CreateInstanceFrom  Jbc  LK@  QVWAB AppDomain žŸœ• œ¡¢•£¤¥•O@GA~ABhUABLaJ>( uO)M: ExecuteAssembly gS$6.^ah4.' FvT:):*FO).:)8/ /&*.D.9%*(.&'8*)K80 >D$&>.:) PM:  CreateInstance    CreateInstanceFrom  >&* tG&*.9%*D$P>&MO) M:C)=.!i8M:'I! >&X&*DDO)&…M:C)= RM: CreateInstance *.(.&'F>;i.:)&59 %S$.4M: Assembly.Load .^`|F8 CreateInstance *D$..IID$.$FF ObjectHandle  g$  .4      .  ^^h  7M  =    I  D    M  : CreateInstanceFrom T'>8 CreateInstanceFrom *(.&'.:)&5 9%S$.4M: Assembly.LoadFrom .^`  AppDomain  J“AB  JZAB  JPd  >c@  d>V[AB  Q>~J  HPQ  Q@qA  YW@  J^  QCA  Y\ CreateInstanceAndUnwrap D\ CreateInstanceFromAndUnwrap J>•ABfmQnLIABs>T@ d>UJQ>cOJ>@jZLjALK@QVWABL}LVWJQeXQƒLK@QVWAB ObjectHandle ‹FeAd>R@ •dLK@QVWABQHRDGJ>XL•ABs@tZQHVEJs>@fghUAB( HI&*O) CreateInstance ' CreateInstanceFrom *D$MBV ..:)8D$@$*.I@4JID $FU:D$MBV$9&>.:)8.I'@J I.&D$$*=.:)&PJ&** .MBR%.I.JID$.:)g;(. .^]&I>.IMBVMBRh w€6MF9B.:)O) gcontroller classh".MBRe'&IL*S'*..: )  t  * D  $         . :  )  '  &5 M  : CreateInstance y=:vNI:) .:))FP:v'F&t.\*(.&'8* >..:)8)0)‡;F.:)8'>NOM %g&*4=C&>.:)h u2))<'%&'O).F> PluginManager wS $*..:)8 PluginManager X&**D$F =) IPlugin 8*')QzF8)z $* using System; using System.Reflection; 97 Chương 3: Miền ứng dụng, cơ chế phản chiếu, và siêu dữ liệu using System.Collections; using System.Collections.Specialized; // Giao diện chung cho tất cả các plug-in. public interface IPlugin { void Start(); void Stop(); } // Một hiện thực đơn giản cho giao diện Iplugin // để minh họa lớp điều khiển PluginManager. public class SimplePlugin : IPlugin { public void Start() { Console.WriteLine(AppDomain.CurrentDomain.FriendlyName + ": SimplePlugin starting "); } public void Stop() { 98 Chương 3: Miền ứng dụng, cơ chế phản chiếu, và siêu dữ liệu Console.WriteLine(AppDomain.CurrentDomain.FriendlyName + ": SimplePlugin stopping "); } } // Lớp điều khiển, quản lý việc nạp và thao tác // các plug-in trong miền ứng dụng của nó. public class PluginManager : MarshalByRefObject { // ListDictionary giữ tham chiếu đến các plug-in. private ListDictionary plugins = new ListDictionary(); // Phương thức khởi dựng mặc định. public PluginManager() {} // Phương thức khởi dựng nhận danh sách các plug-in. public PluginManager(ListDictionary pluginList) { // Nạp các plug-in đã được chỉ định. foreach (string plugin in pluginList.Keys) { this.LoadPlugin((string)pluginList[plugin], plugin); } } // Nạp assembly và tạo plug-in được chỉ định. public bool LoadPlugin(string assemblyName, string pluginName) { try { // Nạp assembly. Assembly assembly = Assembly.Load(assemblyName); // Tạo plug-in mới. IPlugin plugin = 99 Chương 3: Miền ứng dụng, cơ chế phản chiếu, và siêu dữ liệu (IPlugin)assembly.CreateInstance(pluginName, true); if (plugin != null) { // Thêm plug-in mới vào ListDictionary. plugins[pluginName] = plugin; return true; } else { return false; } } catch { return false; } } public void StartPlugin(string plugin) { // Lấy một plug-in từ ListDictionary và // gọi phương thức Start. ((IPlugin)plugins[plugin]).Start(); } 100 Chương 3: Miền ứng dụng, cơ chế phản chiếu, và siêu dữ liệu public void StopPlugin(string plugin) { // Lấy một plug-in từ ListDictionary và // gọi phương thức Stop. ((IPlugin)plugins[plugin]).Stop(); } public ArrayList GetPluginList() { // Trả về danh sách các plug-in. return new ArrayList(plugins.Keys); } } public class CreateInstanceExample { public static void Main() { // Tạo một miền ứng dụng mới. AppDomain domain1 = AppDomain.CreateDomain("NewAppDomain1"); // Tạo một PluginManager trong miền ứng dụng mới // bằng phương thức khởi dựng mặc định. PluginManager manager1 = (PluginManager)domain1.CreateInstanceAndUnwrap( "CreateInstanceExample", "PluginManager"); // Nạp một plug-in mới vào NewAppDomain1. manager1.LoadPlugin("CreateInstanceExample", "SimplePlugin"); // Chạy và dừng plug-in trong NewAppDomain1. manager1.StartPlugin("SimplePlugin"); manager1.StopPlugin("SimplePlugin"); // Tạo một miền ứng dụng mới. AppDomain domain2 = AppDomain.CreateDomain("NewAppDomain2"); . 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. 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 //. quản lý việc nạp và thao tác // các plug-in trong miền ứng dụng của nó. public class PluginManager : MarshalByRefObject { // ListDictionary giữ tham chiếu đến các plug-in. private ListDictionary

Ngày đăng: 08/07/2014, 17:20

TỪ KHÓA LIÊN QUAN