我引用了一个在子域内加载的类(InnerModuleInfoLoader)中的单例(CacheLayer)。 问题是这个引用与生活在主域中的其余代码不是同一个实例。 我想知道是否存在任何方法来规避appDomain的执行隔离以使用单例的实例?
以下是代码:
AppDomain subdomain = this.CreatedChildDomain(AppDomain.CurrentDomain);
从子域
实例化类var loader = (InnerModuleInfoLoader) subdomain.
CreateInstanceFrom(loaderType.Assembly.Location, loaderType.FullName).Unwrap();
Inside InnerModuleInfoLoader:Bellow我希望CacheLayer.Instance对于父域和子域是相同的。
var server = CacheLayer.Instance.Get<string>("Server");
的Singleton
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);
}
答案 0 :(得分:2)
我想知道是否存在任何方法来规避appDomain的执行隔离以使用单例的实例?
您可以使用MarshalByRefObject
,即使您的CacheLayer类继承它。
请记住,AppDomains之间的编组调用会降低性能。我会考虑为每个AppDomain提供两个不同的缓存。