| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- //
- // System.Web.Hosting.ApplicationHost
- //
- // Authors:
- // Patrik Torstensson ([email protected])
- // (class signature from Bob Smith <[email protected]> (C) )
- // Gonzalo Paniagua Javier ([email protected])
- //
- using System;
- using System.Collections;
- using System.IO;
- using System.Runtime.Remoting;
- namespace System.Web.Hosting
- {
- public sealed class ApplicationHost
- {
- class ConfigInitHelper
- {
- public void InitConfig ()
- {
- }
- }
-
- public static object CreateApplicationHost (Type hostType,
- string virtualDir,
- string physicalDir)
- {
- if (hostType == null)
- throw new ArgumentException ("hostType");
- if (virtualDir == null || virtualDir.Length == 0)
- throw new ArgumentException ("virtualDir");
-
- if (physicalDir == null || physicalDir.Length == 0)
- throw new ArgumentException ("physicalDir");
- if (physicalDir [physicalDir.Length - 1] != Path.DirectorySeparatorChar)
- physicalDir += Path.DirectorySeparatorChar;
- int nowInt = DateTime.Now.ToString ().GetHashCode ();
- string nowHash = nowInt.ToString ("x");
- nowInt += physicalDir.GetHashCode ();
- string sum = nowInt.ToString ("x");
- Hashtable hTable = new Hashtable ();
- AppDomainSetup domainSetup = new AppDomainSetup();
- AppDomainFactory.PopulateDomainBindings (nowHash,
- sum,
- sum,
- physicalDir,
- virtualDir,
- domainSetup,
- hTable);
-
- AppDomain domain = AppDomain.CreateDomain (nowHash, null, domainSetup);
- foreach (string key in hTable.Keys)
- domain.SetData (key, (string) hTable [key]);
- domain.SetData (".hostingVirtualPath", virtualDir);
- //domain.SetData(".hostingInstallDir", ?????);
- InitConfigInNewAppDomain (domain);
- ObjectHandle o = domain.CreateInstance (hostType.Module.Assembly.FullName,
- hostType.FullName);
- return o.Unwrap();
- }
- private static void InitConfigInNewAppDomain (AppDomain appDomain)
- {
- Type t = typeof (ConfigInitHelper);
- ObjectHandle o = appDomain.CreateInstance (t.Module.Assembly.FullName, t.FullName);
- ConfigInitHelper helper = (ConfigInitHelper) o.Unwrap();
- helper.InitConfig ();
- }
- }
- }
|