У меня есть свойство, экземпляр которого я хочу разместить в другом домене.
public ModuleLoader Loader
{
get
{
if(_loader == null)
_loader = (ModuleLoader)myDomain.CreateInstanceAndUnwrap(
this.GetType().Assembly.FullName,
"ModuleLoader",
false,
System.Reflection.BindingFlags.CreateInstance,
null,
null,
null,
null);
System.Diagnostics.Debug.WriteLine("Is proxy={0}",
RemotingServices.IsTransparentProxy(_loader));
//writes false
_loader.Session = this;
return _loader;
}
}
Это отлично работает.Но я предполагаю, что все вызовы методов на экземпляре _loader будут вызываться в другом домене (myDomain).Но когда я запускаю следующий код, он все равно записывает основной домен приложения.
public void LoadModule(string moduleAssembly)
{
System.Diagnostics.Debug.WriteLine("Is proxy={0}",
RemotingServices.IsTransparentProxy(this));
System.Diagnostics.Debug.WriteLine(
AppDomain.CurrentDomain.FriendlyName);
System.Diagnostics.Debug.WriteLine("-----------");
}
Это из-за Unwrap ()?Где я делаю неправильно?
Я так понимаю, AppDomain создает отдельную память.Что мне нужно, так это мое основное приложение запускается, оно загружает модули в разные AppDomain.Поскольку основное приложение также хочет наблюдать за некоторой активностью модулей и взаимодействием с объектами, работающими в отдельной области, каков наилучший способ достичь этого.