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; } } }}