Uygulama etki alanlarıyla çalışma

Flash Player 9 ve üstü, Adobe AIR 1.0 ve üstü

ApplicationDomain sınıfının amacı, ActionScript 3.0 tanımlarının bir tablosunu saklamaktır. Bir SWF dosyasındaki tüm kodlar, bir uygulama etki alanında var olacak şekilde tanımlanır. Aynı güvenlik etki alanında bulunan sınıfları bölümlemek için uygulama etki alanlarını kullanırsınız. Böylece, aynı sınıfın birden çok tanımının var olmasına ve alt öğelerin üst tanımları yeniden kullanmasına olanak sağlanır.

Loader sınıfı API'sini kullanarak ActionScript 3.0'da yazılmış harici bir SWF dosyasını yüklerken uygulama etki alanlarını kullanabilirsiniz. (ActionScript 1.0 veya ActionScript 2.0'da yazılmış bir görüntüyü ya da SWF dosyasını yüklerken uygulama etki alanlarını kullanamayacağınızı unutmayın.) Yüklenen sınıfta bulunan tüm ActionScript 3.0 tanımları, uygulama etki alanında saklanır. SWF dosyasını yüklerken LoaderContext nesnesinin applicationDomain parametresini ApplicationDomain.currentDomain öğesine ayarlayarak, dosyanın, Loader nesnesinin uygulama etki alanıyla aynı uygulama etki alanında bulunacağını belirtebilirsiniz Yüklenen SWF dosyasını aynı uygulama etki alanına koyarak, doğrudan sınıflarına erişebilirsiniz. İlişkilendirilmiş sınıf adları üzerinden erişebileceğiniz gömülü medya içeren bir SWF dosyası yüklüyorsanız veya yüklü SWF dosyasının yöntemlerine erişmek istiyorsanız, bu faydalı olabilir.

Şu örnekte, welcome() adlı genel bir yöntem tanımlayan ayrı bir Greeter.swf dosyasına erişimi olduğu varsayılmaktadır:

package 
{ 
    import flash.display.Loader; 
    import flash.display.Sprite; 
    import flash.events.*; 
    import flash.net.URLRequest; 
    import flash.system.ApplicationDomain; 
    import flash.system.LoaderContext; 
 
    public class ApplicationDomainExample extends Sprite 
    { 
        private var ldr:Loader; 
        public function ApplicationDomainExample() 
        { 
            ldr = new Loader(); 
            var req:URLRequest = new URLRequest("Greeter.swf"); 
            var ldrContext:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain); 
            ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler); 
            ldr.load(req, ldrContext);     
        } 
        private function completeHandler(event:Event):void 
        { 
            var myGreeter:Class = ApplicationDomain.currentDomain.getDefinition("Greeter") as Class; 
            var myGreeter:Greeter = Greeter(event.target.content); 
            var message:String = myGreeter.welcome("Tommy"); 
            trace(message); // Hello, Tommy 
        } 
    } 
}

Ayrıca Flash Platformu için Adobe ActionScript 3.0 Başvurusu ApplicationDomain sınıfı örneğine bakın.

Uygulama etki alanlarıyla çalıştığınızda dikkate alınması gereken diğer şeyler şunlardır:

  • Bir SWF dosyasındaki tüm kodlar, bir uygulama etki alanında var olacak şekilde tanımlanır. Geçerli etki alanı, ana uygulamanızın çalıştığı yerdir. Sistem etki alanı, geçerli etki alanı da dahil olmak üzere tüm uygulama etki alanlarını içerir, başka bir deyişle, tüm Flash Player sınıflarını içerir.

  • Sistem etki alanı dışındaki tüm uygulama etki alanları, ilişkilendirilmiş bir üst etki alanına sahiptir. Ana uygulamanızın uygulama etki alanının üst etki alanı, sistem etki alanıdır. Yüklenmiş sınıflar yalnızca üst öğeleri tarafından önceden tanımlanmamışsa tanımlanır. Yüklenmiş bir sınıf tanımını, yeni bir tanımla geçersiz kılamazsınız.

Aşağıdaki diyagramda, domain1.com adında tek bir etki alanındaki çeşitli SWF dosyalarından içerik yükleyen bir uygulama gösterilmektedir. Yüklediğiniz içeriğe bağlı olarak, farklı uygulama etki alanları kullanılabilir. Aşağıdaki metin, uygulamadaki her SWF dosyası için uygun uygulama etki alanını ayarlamak için kullanılan mantığı açıklar.

Grafiği tam boyut görüntüle
A.
Kullanım A

B.
Kullanım B

C.
Kullanım C

Ana uygulama dosyası application1.swf'dir. Bu, diğer SWF dosyalarından içerik yükleyen Loader nesnelerini içerir. Bu senaryoda, geçerli etki alanı Uygulama etki alanı 1'dir. Kullanım A, kullanım B ve kullanım C, bir uygulamadaki her SWF dosyası için uygun uygulama etki alanının ayarlanmasına yönelik farklı teknikleri gösterir.

Kullanım A:
Sistem etki alanının bir alt öğesini oluşturarak alt SWF dosyasını bölümleyin. Diyagramda, Uygulama etki alanı 2, sistem etki alanının bir alt öğesi olarak oluşturulur. application2.swf dosyası Uygulama etki alanı 2'de yüklenir ve böylece sınıf tanımları, application1.swf dosyasında tanımlanan sınıflardan bölümlenir.

Bu tekniğin kullanıldığı koşullardan biri, eski bir uygulamanın, aynı uygulamanın yeni bir sürümünü çakışma olmadan dinamik olarak yüklemesini sağlamaktır. Aynı sınıf adları kullanılsa da, bunlar farklı uygulama etki alanlarına bölümlendiğinden, çakışma oluşmaz.

Aşağıdaki kod, sistem etki alanının alt öğesi olan bir uygulama etki alanı oluşturur ve bu uygulama etki alanını kullanarak SWF dosyasının yüklemesini başlatır:

var appDomainA:ApplicationDomain = new ApplicationDomain(); 
 
var contextA:LoaderContext = new LoaderContext(false, appDomainA); 
var loaderA:Loader = new Loader(); 
loaderA.load(new URLRequest("application2.swf"), contextA);

Kullanım B:
Geçerli sınıf tanımlarına yeni sınıf tanımları ekleyin. module1.swf dosyasının uygulama etki alanı, geçerli etki alanına (Uygulama etki alanı 1) ayarlanır. Böylece, uygulamanın geçerli sınıf tanımları kümesine yeni sınıf tanımları eklemeniz sağlanır. Bu, ana uygulamanın çalışma zamanı paylaşılan kütüphanesi için kullanılabilir. Yüklenen SWF, uzak paylaşılan kütüphane (RSL) olarak değerlendirilir. Uygulama başlatılmadan önce önyükleyici tarafından RSL'lerin yüklenmesini sağlamak için bu tekniği kullanın.

Aşağıdaki kod, bir SWF'yi yükler ve bunun uygulama etki alanını geçerli etki alanına ayarlar:

var appDomainB:ApplicationDomain = ApplicationDomain.currentDomain; 
 
var contextB:LoaderContext = new LoaderContext(false, appDomainB); 
var loaderB:Loader = new Loader(); 
loaderB.load(new URLRequest("module1.swf"), contextB);

Kullanım C:
Geçerli etki alanının yeni bir alt etki alanını oluşturarak üst sınıfın sınıf tanımlarını kullanın. module3.swf dosyasının uygulama etki alanı, geçerli etki alanının bir alt öğesidir ve alt öğe, tüm sınıfların üst öğe sürümlerini kullanır. Bu tekniğin kullanım koşullarından biri, ana uygulama türlerini kullanan ve ana uygulamanın alt öğesi olarak yüklenmiş çok ekranlı zengin Internet uygulamasının (RIA) bir modülü olabilir. Tüm sınıfların her zaman geriye doğru uyumlu olacak şekilde güncellenmesini ve yükleyen uygulamanın her zaman yüklenen şeylerden daha yeni olmasını sağlayabilirseniz, alt öğeler üst öğe sürümlerini kullanır. Yeni bir uygulama etki alanınızın olması, alt SWF dosyasına başvuru olmamasını sağlamanız durumunda, çöp toplama için tüm sınıf tanımlarınızı boşaltmanıza olanak sağlar.

Bu teknik, yüklenen modüllerin, yükleyenin tek nesnelerini ve statik sınıf üyelerini paylaşmasına olanak sağlar.

Aşağıdaki kod, geçerli etki alanının yeni bir alt etki alanını oluşturur ve bu uygulama etki alanını kullanarak SWF dosyasının yüklemesini başlatır:

var appDomainC:ApplicationDomain = new ApplicationDomain(ApplicationDomain.currentDomain); 
 
var contextC:LoaderContext = new LoaderContext(false, appDomainC); 
var loaderC:Loader = new Loader(); 
loaderC.load(new URLRequest("module3.swf"), contextC);