细说进程、应用程序域与上下文之间的关系(二)—— 应用程序域
目录
一、进程的概念与作用
二、应用程序域
三、深入了解.NET上下文
四、进程应用程序域与线程的关系
属性 | 说明 |
ActivationContext | 获取当前应用程序域的激活上下文。 |
ApplicationIdentity | 获得应用程序域中的应用程序标识。 |
BaseDirectory | 获取基目录。 |
CurrentDomain | 获取当前 Thread 的当前应用程序域。 |
Id | 获得一个整数,该整数唯一标识进程中的应用程序域。 |
RelativeSearchPath | 获取相对于基目录的路径,在此程序集冲突解决程序应探测专用程序集。 |
SetupInformation | 获取此实例的应用程序域配置信息。 |
方法 | 说明 |
CreateDomain | 创建新的应用程序域。 |
CreateInstance | 创建在指定程序集中定义的指定类型的新实例。 |
CreateInstanceFrom | 创建在指定程序集文件中定义的指定类型的新实例。 |
DoCallBack | 在另一个应用程序域中执行代码,该应用程序域由指定的委托标识。 |
ExecuteAssembly | 执行指定文件中包含的程序集。 |
ExecuteAssemblyByName | 执行程序集。 |
GetAssemblies | 获取已加载到此应用程序域的执行上下文中的程序集。 |
GetCurrentThreadId | 获取当前线程标识符。 |
GetData | 为指定名称获取存储在当前应用程序域中的值。 |
IsDefaultAppDomain | 返回一个值,指示应用程序域是否是进程的默认应用程序域。 |
SetData | 为应用程序域属性分配值。 |
Load | 将 Assembly 加载到此应用程序域中。 |
Unload | 卸载指定的应用程序域。 |
事件 | 说明 |
AssemblyLoad | 在加载程序集时发生。 |
AssemblyResolve | 在对程序集的解析失败时发生。 |
DomainUnload | 在即将卸载 AppDomain 时发生。 |
ProcessExit | 当默认应用程序域的父进程存在时发生。 |
ReflectionOnlyAssemblyResolve | 当程序集的解析在只反射上下文中失败时发生。 |
ResourceResolve | 当资源解析因资源不是程序集中的有效链接资源或嵌入资源而失败时发生。 |
TypeResolve | 在对类型的解析失败时发生。 |
UnhandledException | 当某个异常未被捕获时出现。 |
static void Main(string[] args) { var appDomain = AppDomain.CreateDomain("NewAppDomain"); appDomain.Load("Model"); foreach (var assembly in appDomain.GetAssemblies()) Console.WriteLine(string.Format("{0}\n----------------------------", assembly.FullName)); Console.ReadKey(); }
static void Main(string[] args) { //新建名为NewAppDomain的应用程序域 AppDomain newAppDomain = AppDomain.CreateDomain("NewAppDomain"); //建立AssemblyLoad事件处理方法 newAppDomain.AssemblyLoad += (obj, e) => { Console.WriteLine(string.Format("{0} is loading!", e.LoadedAssembly.GetName())); }; //建立DomainUnload事件处理方法 newAppDomain.DomainUnload += (obj, e) => { Console.WriteLine("NewAppDomain Unload!"); }; //加载程序集 newAppDomain.Load("Model"); //模拟操作 for (int n = 0; n < 5; n++) Console.WriteLine(" Do Work.......!"); //卸载AppDomain AppDomain.Unload(newAppDomain); Console.ReadKey(); }
namespace Test { public class Program { static void Main(string[] args) { var person=(Person)AppDomain.CurrentDomain .CreateInstance("Model","Model.Person").Unwrap(); person.ID = 1; person.Name = "Leslie"; person.Age = 29; Console.WriteLine(string.Format("{0}'s age is {1}!",person.Name,person.Age)); Console.ReadKey(); } } } namespace Model { public class Person { public int ID { get; set; } public string Name { get; set; } public int Age { get; set; } } }