File: Hosting\PreloadHost.cs
Project: ndp\fx\src\xsp\system\Web\System.Web.csproj (System.Web)
//------------------------------------------------------------------------------
// <copyright file="PreloadHost.cs" company="Microsoft">
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// </copyright>
//------------------------------------------------------------------------------
 
namespace System.Web.Hosting {
    
    using System;
    using System.Web;
    using System.Web.Util;
    using System.Configuration;
 
    internal sealed class PreloadHost : MarshalByRefObject, IRegisteredObject {
 
        public PreloadHost() {
            HostingEnvironment.RegisterObject(this);
        }
 
        public void CreateIProcessHostPreloadClientInstanceAndCallPreload(string preloadObjTypeName, string[] paramsForStartupObj) {
 
            using (new ApplicationImpersonationContext()) {
                // Check the type
                Type preloadObjType = null;
                try {
                    preloadObjType = Type.GetType(preloadObjTypeName, true);
                }
                catch (Exception e) {
                    throw new InvalidOperationException (
                        Misc.FormatExceptionMessage(e, new string[]{
                            SR.GetString(SR.Failure_Create_Application_Preload_Provider_Type, preloadObjTypeName)} ));
                }
 
                if (!typeof(IProcessHostPreloadClient).IsAssignableFrom(preloadObjType)) {
                    throw new ConfigurationErrorsException(SR.GetString(SR.Invalid_Application_Preload_Provider_Type, preloadObjTypeName));
                }
 
                // Let all other exceptons fall through to the default AppDomain
                IProcessHostPreloadClient preloadClient = (IProcessHostPreloadClient)Activator.CreateInstance(preloadObjType);
                preloadClient.Preload(paramsForStartupObj);
            }
        }
 
        internal Exception InitializationException { get { return HttpRuntime.InitializationException; } }
 
        void IRegisteredObject.Stop(bool immediate) {
            HostingEnvironment.UnregisterObject(this);
        }
 
        public override Object InitializeLifetimeService() {
            return null; // never expire lease
        }
    }
}