[英]How to use the same singleton instance from main appdomain in childs appdomain
我有一个从子域中加载的类(InnerModuleInfoLoader)对单例(CacheLayer)的引用。 问题在于,该引用与主域中其余代码的实例不同。 我想知道是否存在任何方法可以避免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);
}
我想知道是否存在任何方法可以避免appDomain的执行隔离以使用单例实例?
您可以使用MarshalByRefObject
,即使CacheLayer类继承自它。
请记住,AppDomain之间的封送调用会降低性能。 我会考虑每个AppDomain仅具有两个不同的缓存。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.