如何在childs appdomain

时间:2016-02-25 16:22:29

标签: c# .net appdomain

我引用了一个在子域内加载的类(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);
}   

1 个答案:

答案 0 :(得分:2)

  

我想知道是否存在任何方法来规避appDomain的执行隔离以使用单例的实例?

您可以使用MarshalByRefObject,即使您的CacheLayer类继承它。

请记住,AppDomains之间的编组调用会降低性能。我会考虑为每个AppDomain提供两个不同的缓存。