Metode IDataModelManager2::AcquireSubNamespace (dbgmodel.h)

Metode AcquireSubNamespace membantu dalam pembangunan sesuatu yang mungkin lebih tradisional terlihat seperti namespace bahasa daripada objek baru dalam bahasa dinamis. Jika, misalnya, penelepon ingin mengategorikan properti pada objek proses untuk membuat objek proses lebih terorganisir dan properti lebih mudah ditemukan, salah satu metode untuk melakukan ini adalah membuat sub-objek untuk setiap kategori pada objek proses dan menempatkan properti tersebut di dalam objek tersebut. Masalah dengan gagasan ini adalah bahwa sub-objek memiliki konteksnya sendiri dan properti di sana melewati sub-objek sebagai penunjuk instans alih-alih objek proses itu sendiri. Metode AcquireSubNamespace membantu membuat "sub-objek" kepemilikan bersama di mana pointer instans yang diteruskan ke properti sub-objek adalah objek induk.

Sebagai contoh, pertimbangkan objek proses yang ingin kita tambahkan properti Heaps yang mewakili timbunan proses (dan semua timbunan kustom lainnya dalam proses). Awalnya mungkin muncul sebagai berikut:

    • Process [foo.exe] 
        o Heaps [3 heaps]

Karena objek proses mungkin memiliki banyak bidang lain dan mungkin ada banyak hal yang terkait dengan Memori dalam prosesnya, paradigma yang lebih baik mungkin:

    • Process [foo.exe] 
        o Memory [A namespace of things associated with Memory in the process] 
             Heaps   

Jika objek Memori di atas hanyalah properti normal yang mengembalikan objek baru, ketika pemanggil meminta someProcess.Memory.Heaps, pengakses properti untuk properti Heaps akan diteruskan objek konteks (penunjuk ini) dari objek Memori yang baru dibuat tanpa cara mudah untuk kembali ke atribut lain dari proses. Jika objek Memori malah dibuat dengan metode AcquireSubNamespace, paradigma terlihat seperti di atas kecuali bahwa pengaktor properti untuk apa pun pada objek Memori akan menjadi objek proses itu sendiri. Ini memungkinkan implementasi properti Heaps untuk dengan mudah kembali ke atribut lain dari proses. Gaya objek ini adalah sub-namespace, bukan sub-objek.

Penting untuk dicatat bahwa tidak ada yang dilakukan metode AcquireSubNamespace yang tidak dapat dicapai dengan metode lain. Akibatnya, ini adalah metode pembantu yang melakukan hal berikut:

    • Checks if there is a model registered under the name given by subNamespaceModelName. If so, returns it. If not, proceeds to: 

      o Creates and registers a new model under the name given by subNamespaceModelName
      o Acquires the model registered under the name given by modelName.
      o Adds a new property named according to accessName with metadata supplied by the metadata argument. The accessor for this property returns a new object with special properties: 
         The new object has the model created and registered under subNamespaceModelName attached as a parent.
         The parent model has a context adjustor. The context adjustor is a property.
         The context adjustor property getter returns the original process object.

Setelah sub-namespace dibuat, kepemilikannya dianggap dibagikan di antara semua pemanggil potensial metode AcquireSubNamespace dengan set argumen yang sama. Sebagai semantik kepemilikan bersama, tidak tepat untuk membatalkan pendaftaran sub-namespace secara sewenang-wenang.

Sintaks

HRESULT AcquireSubNamespace(
  PCWSTR       modelName,
  PCWSTR       subNamespaceModelName,
  PCWSTR       accessName,
  IKeyStore    *metadata,
  IModelObject **namespaceModelObject
);

Parameter

modelName

Nama model data yang sedang diperluas dengan sub-namespace.

subNamespaceModelName

Nama model data yang mewakili sub-namespace itu sendiri. Sub-namespace yang baru dibuat adalah model data yang akan didaftarkan dengan nama ini.

accessName

Properti nama ini akan ditambahkan ke model data yang terdaftar dengan nama yang diberikan oleh argumen modelName untuk mengakses sub-namespace.

metadata

Metadata opsional yang akan dikaitkan dengan kunci yang diberikan oleh accessName jika panggilan ini adalah metadata yang membuat sub-namespace bersama.

namespaceModelObject

Model data yang mewakili sub-namespace akan dikembalikan di sini. Model data ini mungkin telah dibuat oleh panggilan sebelumnya ke metode AcquireSubNamespace atau oleh panggilan saat ini. Kepemilikan dianggap dibagikan di antara semua penelepon.

Nilai kembali

Metode ini mengembalikan HRESULT.

Keterangan

Kode Sampel

ComPtr<IDataModelManager> spManager;   /* get the data model manager */
ComPtr<IModelObject> spExtensionModel; /* get a data model you want to extend 
                                          some namespace with (see
                                          CreateDataModelObject) */

// Add a shared namespace called "Memory" to Process.  Then extend this namespace 
// with spExtensionModel
ComPtr<IModelObject> spProcessMemory;
if (SUCCEEDED(spManager->AcquireSubNamespace(
    L"Debugger.Models.Process", 
    L"Debugger.Models.Process.Memory", 
    L"Memory", 
    nullptr /* probably should have help metadata! */, 
    &spProcessMemory)))
{
    if (SUCCEEDED(spProcessMemory->AddParentModel(spExtensionModel.Get(), 
                                                  nullptr, 
                                                  false)))
    {
        // The properties on spExtensionModel are now in "Process.Memory.*"
        // In addition, the context (*this*) pointer passed to properties on
        // spExtensionModel is the process object itself, not some empty 
        // synthetic created for the namespace!
    }
}

Persyaratan

Persyaratan Nilai
Header dbgmodel.h

Lihat juga

Antarmuka IDataModelManager2