Partager via


IMetadataInfo::GetModuleContextContainer, méthode

Retourne le conteneur de contexte pour les métadonnées.

Syntaxe

virtual IHttpModuleContextContainer* GetModuleContextContainer(  
   VOID  
) = 0;  

Paramètres

Cette méthode ne prend aucun paramètre.

Valeur renvoyée

Pointeur vers un IHttpModuleContextContainer.

Remarques

La GetModuleContextContainer valeur de retour de la méthode dépend de l’implémentation. Par défaut, l’implémentation actuelle crée une interface IDispensedHttpModuleContextContainer qui est synchronisée mais pas distribuée.

Remarques pour les implémenteurs

Les implémenteurs IMetadataInfo sont responsables de la gestion de la mémoire avec ces données ; Par conséquent, IMetadataInfo les implémenteurs doivent créer un IDispensedHttpModuleContextContainer pointeur au moment de la construction et conserver une private référence à ce IDispensedHttpModuleContextContainer pointeur pendant la durée de vie du IMetadataInfo pointeur. Lorsque vous appelez la GetModuleContextContainer méthode, vous devez upcast et retourner ce même IDispensedHttpModuleContextContainer pointeur. Lorsque vous appelez le destructeur de la classe qui implémente l’interface IMetadataInfo , ce destructeur doit appeler la méthode IDispensedHttpModuleContextContainer::ReleaseContainer sur cette private référence, puis définir cette référence sur NULL.

GetModuleContextContainer ne doit pas retourner la valeur NULL. Si le conteneur interne a la valeur NULL, définissez ce conteneur interne sur la valeur de l’appel à IHttpServer::D ispenseContainer, puis retournez ce même conteneur.

Notes

Bien que les opérations de upcast implicites soient considérées comme sûres, envisagez d’utiliser un cast explicite pour la clarté du programme. Envisagez également d’utiliser l’opérateur dynamic_cast chaque fois que possible.

Remarques pour les appelants

IMetadataInfo les implémenteurs sont responsables de la gestion de la mémoire avec ces données ; par conséquent, IMetadataInfo les clients ne doivent pas relâcher, appeler delete ou tenter de réduire et appeler IDispensedHttpModuleContextContainer::ReleaseContainer le pointeur retourné IHttpModuleContextContainer lorsque ces données ne sont plus nécessaires.

Exemple

L’exemple de code suivant illustre une classe personnalisée nommée MyContainer qui implémente l’interface IDispensedHttpModuleContextContainer et une classe personnalisée nommée MyClass qui implémente l’interface IMetadataInfo . MyClass gère un MyContainer pointeur pendant la durée de vie d’un MyClass pointeur.

// The MyContainer class implements the   
// IDispensedHttpModuleContextContainer interface.  
class MyContainer : public IDispensedHttpModuleContextContainer  
{  
public:  
    // The MyContainer method is the public  
    // constructor for the MyContainer class.  
    // Make this method protected if the   
    // MyContainer class is abstract.  
    // dispensed: true if the container should  
    // call delete this when the ReleaseContainer  
    // method is called.  
    MyContainer(bool dispensed = false)   
        : m_dispensed(dispensed)  
    {  
  
    }  
  
    // The ReleaseContainer method   
    // calls delete this if this container  
    // is dispensed.  
    virtual VOID ReleaseContainer(VOID)  
    {  
        if (m_dispensed)  
        {  
            delete this;  
        }  
    }  
  
    // Implement additional   
    // IDispensedHttpModuleContextContainer  
    // pure virtual methods if this class  
    // is not abstract.  
  
private:  
    // The MyContainer method is the private  
    // destructor for the MyContainer class.  
    // Make this method protected and virtual   
    // if the MyContainer class expects   
    // to be a class of derivation. This method   
    // should not be public because   
    // IDispensedHttpModuleContextContainer pointers  
    // should be disposed externally only by   
    // calling the ReleaseContainer method.  
    ~MyContainer()  
    {  
  
    }  
  
    // Specify a Boolean value for dispensing.  
    bool m_dispensed;  
};  
  
// The MyClass class implements the  
// IMetadataInfo interface.  
class MyClass : public IMetadataInfo  
{  
public:  
    // The MyClass method is the public  
    // constructor for the MyClass class.  
    MyClass()  
    {  
        m_container = new MyContainer;  
    }  
  
    // The MyClass method is the   
    // public virtual destructor   
    // for the MyClass class. This destructor  
    // calls ReleaseContainer on the internal  
    // IDispensedHttpModuleContextContainer  
    // pointer and sets that pointer to NULL.  
    virtual ~MyClass()  
    {  
        m_container->ReleaseContainer();  
        m_container = NULL;  
    }  
  
    // The GetModuleContextContainer method  
    // returns an IHttpModuleContextContainer  
    // pointer.  
    // return: an explicit upcast to an  
    // IDispensedHttpModuleContextContainer  
    // pointer for readability.  
    virtual IHttpModuleContextContainer*   
        GetModuleContextContainer(VOID)  
    {  
        return (IHttpModuleContextContainer*)m_container;  
    }  
  
    // Implement additional IMetadataInfo  
    // pure virtual methods if this class  
    // is not abstract.  
  
private:  
    // Specify a private  
    // IDispensedHttpModuleContextContainer  
    // pointer.  
    IDispensedHttpModuleContextContainer* m_container;  
};  

Spécifications

Type Description
Client - IIS 7.0 sur Windows Vista
- IIS 7.5 sur Windows 7
- IIS 8.0 sur Windows 8
- IIS 10.0 sur Windows 10
Serveur - IIS 7.0 sur Windows Server 2008
- IIS 7.5 sur Windows Server 2008 R2
- IIS 8.0 sur Windows Server 2012
- IIS 8.5 sur Windows Server 2012 R2
- IIS 10.0 sur Windows Server 2016
Produit - IIS 7.0, IIS 7.5, IIS 8.0, IIS 8.5, IIS 10.0
- IIS Express 7.5, IIS Express 8.0, IIS Express 10.0
En-tête Httpserv.h

Voir aussi

IMetadataInfo, interface
IHttpApplication::GetModuleContextContainer, méthode
IHttpConnection::GetModuleContextContainer, méthode
IHttpContext::GetModuleContextContainer, méthode
IHttpFileInfo::GetModuleContextContainer, méthode
IHttpFileMonitor::GetModuleContextContainer, méthode
IHttpSite::GetModuleContextContainer, méthode
IHttpUrlInfo::GetModuleContextContainer, méthode