簡體   English   中英

如何在子應用程序域中使用來自主應用程序域的同一單例實例

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM