Compartilhar via


Método IModelObject::AddParentModel (dbgmodel.h)

O método AddParentModel adiciona um novo modelo pai ao objeto fornecido. Esse modelo pode ser adicionado no final da cadeia de pesquisa (o argumento de substituição é especificado como false) ou na frente da cadeia de pesquisa (o argumento de substituição é especificado como true). Além disso, cada modelo pai pode, opcionalmente, ajustar o contexto (a semântica deste ponteiro) para qualquer propriedade ou conceito no pai fornecido (ou qualquer pessoa em sua hierarquia pai). O ajuste de contexto raramente é usado, mas permite alguns conceitos poderosos, como inserção de objetos, construção de namespaces etc...

Quando um modelo pai tiver um ajuste de contexto, o modelo de dados principal executará esse ajuste automaticamente em nome do chamador. Na verdade, para uma instância de objeto com um pai de modelo pai com um ajustador de contexto para newContext, uma chamada de

instance->GetKeyValue("someKey", &pValue, nullptr);

acabará alterando o contexto/esse ponteiro de instância para newContext antes de chamar o método GetValue de someKey, já que o acesso a someKey passou pelo ajustador de contexto.

Qualquer IModelObject adicionado como um modelo pai a outro objeto deve dar suporte individualmente ao conceito IDataModelConcept . A falha ao implementar esse conceito pode resultar na falha na chamada do método AddParentModel.

Sintaxe

HRESULT AddParentModel(
  IModelObject *model,
  IModelObject *contextObject,
  bool         override
);

Parâmetros

model

Um IModelObject que será adicionado à cadeia de modelo pai do objeto fornecido. Esse IModelObject deve dar suporte individualmente ao conceito IDataModelConcept .

contextObject

Se o modelo de dados tiver um ajuste de contexto associado a ele, o contexto ajustado (ou um acessador de propriedade que retorna o contexto ajustado) poderá ser passado aqui.

override

Uma indicação de se o modelo pai especificado pelo argumento de modelo é colocado na frente ou no final da cadeia linear de modelos pai. Um valor de false (normalmente fornecido) indica o fim da cadeia. Um valor de true indica a frente da cadeia.

Retornar valor

Esse método retorna HRESULT que indica êxito ou falha.

Comentários

** Exemplo de código**



ComPtr<IDataModelManager> spManager; /* get the data model manager */
ComPtr<IModelObject> spObject;       /* get an object */

// A data model *MUST* implement IDataModelConcept.  Create an implementation of this and a string conversion.
class MyDataModel :
    public Microsoft::WRL::RuntimeClass<
        Microsoft::WRL::RuntimeClassFlags<Microsoft::WRL::RuntimeClassType::ClassicCom>,
        IDataModelConcept,
        IStringDisplayableConcept
        >
{
public:
 
    IFACEMETHOD(InitializeObject)(_In_ IModelObject * /*pModelObject*/, 
                                  _In_opt_ IDebugHostTypeSignature * /*pMatchingSignature*/,
                                  _In_opt_ IDebugHostSymbolEnumerator * /*pWildcardMatches*/)
    {
        return S_OK;
    }

    IFACEMETHOD(GetName)(_Out_ BSTR *pModelName)
    { 
        return E_NOTIMPL;
    }

    IFACEMETHOD(ToDisplayString)(_In_ IModelObject * /*pContextObject*/, 
                                 _In_opt_ IKeyStore * /*pMetadata */, 
                                 _Out_ BSTR *pDisplayString)
    {
        *pDisplayString = SysAllocString(L"Hello World");
        return *pDisplayString == nullptr ? E_OUTOFMEMORY : S_OK;
    }
};

// Create the data model, an object for it, set concepts, and add it as a parent to spObject.
ComPtr<MyDataModel> spDataModel = Microsoft::WRL::Make<MyDataModel>();
ComPtr<IModelObject> spDataModelObject;
if (spDataModel != nullptr &&
    SUCCEEDED(spManager->CreateDataModelObject(spDataModel.Get(), &spDataModelObject)) &&
    SUCCEEDED(spDataModelObject->SetConcept(__uuidof(IStringDisplayableConcept),
                                            static_cast<IStringDisplayableConcept *>
                                                (spDataModel.Get()), 
                                            nullptr)))
{
    if (SUCCEEDED(spObject->AddParentModel(spDataModelObject.Get(), nullptr, false)))
    {
        // spObject has been *EXTENDED* to have a display string.  It has a parent model 
        // which has that concept.  That extension (and whatever else was added 
        // on spDataModelObject) can be removed with a single RemoveParentModel call.
    }
}

Requisitos

Requisito Valor
Cabeçalho dbgmodel.h

Confira também

Interface IModelObject