IHttpContext::GetModuleContextContainer (Método)
Recupera el contenedor de contexto del módulo para el contexto actual.
Sintaxis
virtual IHttpModuleContextContainer* GetModuleContextContainer(
VOID
) = 0;
Parámetros
Este método no toma parámetros.
Valor devuelto
Puntero a una interfaz IHttpModuleContextContainer .
Comentarios
El valor devuelto del GetModuleContextContainer
método depende de la implementación. De forma predeterminada, la implementación actual crea una interfaz IDispensedHttpModuleContextContainer sincronizada pero no dispensada.
Notas para los implementadores
Los implementadores de IHttpContext son responsables de la administración de memoria con estos datos; por lo tanto, IHttpContext
los implementadores deben crear un IDispensedHttpModuleContextContainer
puntero en la construcción y contener una private
referencia a este IDispensedHttpModuleContextContainer
puntero para la vida útil del IHttpContext
puntero. Al llamar al GetModuleContextContainer
método , debe realizar una difusión vertical y devolver este mismo IDispensedHttpModuleContextContainer
puntero. Cuando se llama al destructor de la clase que implementa la IHttpContext
interfaz , este destructor debe llamar al método IDispensedHttpModuleContextContainer::ReleaseContainer en esta private
referencia y, a continuación, establecer esa referencia en NULL.
GetModuleContextContainer
no debe devolver NULL. Si el contenedor interno es NULL, establezca este contenedor interno en el valor de la llamada a IHttpServer::D ispenseContainer y, a continuación, devuelva este mismo contenedor.
Nota
Aunque las operaciones de difusión implícitas se consideran seguras, considere la posibilidad de usar una conversión explícita para mayor claridad del programa. Considere también la posibilidad de usar el operador dynamic_cast siempre que sea posible.
Notas para autores de la llamada
IHttpContext
Los implementadores son responsables de la administración de memoria con estos datos; por lo tanto, IHttpContext
los clientes no deben liberar, llamar delete
a ni intentar reducir la difusión y llamar IDispensedHttpModuleContextContainer::ReleaseContainer
al puntero devuelto IHttpModuleContextContainer
cuando estos datos ya no son necesarios.
Ejemplo
En el ejemplo de código siguiente se muestra una clase personalizada denominada MyContainer
que implementa la IDispensedHttpModuleContextContainer
interfaz y una clase personalizada denominada MyClass
que implementa la IHttpContext
interfaz . MyClass
administra un MyContainer
puntero durante la vigencia de un MyClass
puntero.
// 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
// IHttpContext interface.
class MyClass : public IHttpContext
{
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
// IDispensedHttpModuleContextContainer
// pointer for readability.
virtual IHttpModuleContextContainer*
GetModuleContextContainer(VOID)
{
return (IHttpModuleContextContainer*)m_container;
}
// Implement additional IHttpContext
// pure virtual methods if this class
// is not abstract.
private:
// Specify a private
// IDispensedHttpModuleContextContainer
// pointer.
IDispensedHttpModuleContextContainer* m_container;
};
Requisitos
Tipo | Descripción |
---|---|
Remoto | - IIS 7.0 en Windows Vista - IIS 7.5 en Windows 7 - IIS 8.0 en Windows 8 - IIS 10.0 en Windows 10 |
Servidor | - IIS 7.0 en Windows Server 2008 - IIS 7.5 en Windows Server 2008 R2 - IIS 8.0 en Windows Server 2012 - IIS 8.5 en Windows Server 2012 R2 - IIS 10.0 en Windows Server 2016 |
Producto | - 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 |
Encabezado | Httpserv.h |
Consulte también
IHttpContext (interfaz)
IHttpApplication::GetModuleContextContainer (Método)
IHttpConnection::GetModuleContextContainer (Método)
IHttpFileInfo::GetModuleContextContainer (Método)
IHttpFileMonitor::GetModuleContextContainer (Método)
IHttpSite::GetModuleContextContainer (Método)
IHttpUrlInfo::GetModuleContextContainer (Método)
IMetadataInfo::GetModuleContextContainer (Método)