0
我从加载到子域内的类(InnerModuleInfoLoader)中引用单例(CacheLayer)。 问题在于,此引用与生活在主域中的其余代码不同。 我想知道是否存在任何方式来规避appDomain的执行隔离以使用单例的实例?如何使用子主AppDomain中的主AppDomain使用相同的单例实例
下面是代码:
AppDomain subdomain = this.CreatedChildDomain(AppDomain.CurrentDomain);
实例化类从子域
var loader = (InnerModuleInfoLoader) subdomain.
CreateInstanceFrom(loaderType.Assembly.Location, loaderType.FullName).Unwrap();
内InnerModuleInfoLoader:娄我想这CacheLayer.Instance将是父和子域相同。
var server = CacheLayer.Instance.Get<string>("Server");
辛格尔顿
public sealed class CacheLayer
{
private static readonly CacheLayer instance = new CacheLayer();
private static readonly ObjectCache cache;
static CacheLayer()
{
cache = MemoryCache.Default;
}
private CacheLayer(){}
//More code omitted
}
子站点创建
protected virtual AppDomain CreatedChildDomain(AppDomain parentDomain)
{
Evidence evidence = new Evidence(parentDomain.Evidence);
AppDomainSetup setup = parentDomain.SetupInformation;
return AppDomain.CreateDomain("ModuleFinder", evidence, setup);
}
同意,您将使用远程进行通信,每个域之间传递的对象将被序列化等等。更不用说其他远程处理/代理问题。只有当你知道你在做什么时才这样做。 =) –
所以如果MarshalByRefObject是我不喜欢使用它的唯一方法。我将不得不依靠一些其他的东西来跨应用程序域共享数据,也许用户设置在这里很方便。 –