Partager via


IDispensedHttpModuleContextContainer::ReleaseContainer, méthode

Supprime le conteneur de contexte s’il est distribué.

Syntaxe

virtual VOID ReleaseContainer(  
   VOID  
) = 0;  

Paramètres

Cette méthode ne prend aucun paramètre.

Cohérence de thread

La ReleaseContainer méthode n’est pas thread-safe pour les implémenteurs qui sont dispensés.

Remarques

Le comportement de cette méthode dépend de l’implémentation. Vous devez utiliser les informations suivantes comme recommandations, mais elles peuvent ne pas être correctes dans tous les scénarios :

  • La plupart des implémenteurs déclarent une valeur privée Boolean nommée dispensed; la valeur par défaut est false et le comportement par défaut est qui dispensed n’est jamais défini sur true. Toutefois, si l’implémentation a la valeur dispensedtrue, quand ReleaseContainer est appelé, le pointeur IDispensedHttpModuleContextContainer appelle delete sur lui-même. Sinon, ReleaseContainer est une opération vide.

  • Si delete est appelé, IDispensedHttpModuleContextContainer énumère son tableau interne de pointeurs IHttpStoredContext et appelle la méthode IHttpStoredContext::CleanupStoredContext sur tous les pointeurs qui ont été ajoutés précédemment à l’aide de la méthode IHttpModuleContextContainer::SetModuleContext . Le conteneur de contexte supprime ensuite la mémoire du tableau sur le tas et affecte à ce tableau la valeur NULL.

Exemple

L’exemple suivant montre une classe personnalisée nommée MyContainer qui implémente l’interface IDispensedHttpModuleContextContainer . Il montre également une classe personnalisée nommée MyClass qui implémente une méthode nommée GetModuleContextContainer. 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;  
};  
  
// Create the MyClass class.  
class MyClass  
{  
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: a static upcast   
    // IDispensedHttpModuleContextContainer.  
    virtual IHttpModuleContextContainer*   
        GetModuleContextContainer(VOID)  
    {  
        return static_cast<IHttpModuleContextContainer*>  
            (m_container);  
    }  
  
    // Implement additional IHttpUrlInfo  
    // 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

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