Welcome

首页 / 软件开发 / .NET编程技术 / CLR寄宿(下) 托管宿主

CLR寄宿(下) 托管宿主2014-06-15通过托管代码来管理CLR的方式,称为托管宿主。想实现托管宿主很简单,只要实现System.AppDomainManager类就可以了。AppDomainManager类的定义如代码清单1-1所示。

代码清单1-1  AppDomainManager类定义

[ComVisibleAttribute(true)]

[SecurityPermissionAttribute(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.Infrastructure)]

[SecurityPermissionAttribute(SecurityAction.InheritanceDemand, Flags = SecurityPermissionFlag.Infrastructure)]

public classAppDomainManager : MarshalByRefObject

要实现自己的托管宿主需要实现一个AppDomainManager类的子类,重写其中的虚方法。代码清单1-2自定义XHAppDomainManager类来实现简单的托管宿主。

代码清单1-2自定义XHAppDomainManager类

namespace 托管宿主

{

   [GuidAttribute("F4D15099-3407-4A7E-A607-DEA440CF3891")]

   [SecurityPermissionAttribute(SecurityAction.LinkDemand,

       Flags = SecurityPermissionFlag.Infrastructure)]

[SecurityPermissionAttribute(SecurityAction.InheritanceDemand,         Flags = SecurityPermissionFlag.Infrastructure)]

   class XHAppDomainManager:AppDomainManager

   {

       private HostSecurityManagerXHHostSecurityManager = null;

       public override void InitializeNewDomain(AppDomainSetupappDomainInfo)

       {

           Console.WriteLine(" XH AppDomain Manager ");

           XHHostSecurityManager = AppDomain.CurrentDomain.CreateInstanceAndUnwrap(

               "XHSecurityManager, Version=1.0.0.3, Culture=neutral, "+

               "PublicKeyToken=5659fc598c2a503e",

               "托管宿主.XHHostSecurityManager") as HostSecurityManager;

           Console.WriteLine(" Custom Security Manager Created.");

       }

       public override HostSecurityManager  HostSecurityManager

       {

           get

           {

               return XHHostSecurityManager;

           }

       }

       public override AssemblyEntryAssembly

       {

           get

           {

               return base.EntryAssembly;

           }

       }

   }

}