IHttpUrlInfo::GetModuleContextContainer 方法
返回特定于 URL 的信息的上下文容器。
语法
virtual IHttpModuleContextContainer* GetModuleContextContainer(
VOID
) = 0;
参数
此方法不采用参数。
返回值
指向 IHttpModuleContextContainer 的指针。
备注
方法 GetModuleContextContainer
返回值取决于实现。 默认情况下,当前实现创建同步但未分配的 IDispensedHttpModuleContextContainer 接口。
实现者须知
IHttpUrlInfo 实现者负责使用此数据进行内存管理;因此, IHttpUrlInfo
实现者应在构造时创建一个 IDispensedHttpModuleContextContainer
指针, private
并在指针的生命周期内保留对此 IDispensedHttpModuleContextContainer
指针的 IHttpUrlInfo
引用。 调用 GetModuleContextContainer
方法时,应向上转换并返回此相同的 IDispensedHttpModuleContextContainer
指针。 调用实现 IHttpUrlInfo
接口的类的析构函数时,此析构函数应对此private
引用调用 IDispensedHttpModuleContextContainer::ReleaseContainer 方法,然后将该引用设置为 NULL。
GetModuleContextContainer
不应返回 NULL。 如果内部容器为 NULL,请在调用 IHttpServer::D ispenseContainer 时将此内部容器设置为值,然后返回此同一容器。
注意
尽管隐式向上转换操作被视为安全操作,但请考虑使用显式强制转换来明确程序。 此外,请考虑尽可能使用 dynamic_cast 运算符。
对调用者的说明
IHttpUrlInfo
实施者负责使用此数据进行内存管理;因此, IHttpUrlInfo
当不再需要此数据时,客户端不得释放、调用 delete
或尝试向下转换并调用 IDispensedHttpModuleContextContainer::ReleaseContainer
返回 IHttpModuleContextContainer
的指针。
示例
下面的代码示例演示了实现 接口的名为 的MyContainer
IDispensedHttpModuleContextContainer
自定义类,以及实现 接口的IHttpUrlInfo
名为 的MyClass
自定义类。 MyClass
在 MyContainer
指针的 MyClass
生存期内管理指针。
// 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
// IHttpUrlInfo interface.
class MyClass : public IHttpUrlInfo
{
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 IHttpUrlInfo
// pure virtual methods if this class
// is not abstract.
private:
// Specify a private
// IDispensedHttpModuleContextContainer
// pointer.
IDispensedHttpModuleContextContainer* m_container;
};
要求
类型 | 说明 |
---|---|
客户端 | - Windows Vista 上的 IIS 7.0 - Windows 7 上的 IIS 7.5 - Windows 8 上的 IIS 8.0 - Windows 10 上的 IIS 10.0 |
服务器 | - Windows Server 2008 上的 IIS 7.0 - Windows Server 2008 R2 上的 IIS 7.5 - Windows Server 2012 上的 IIS 8.0 - Windows Server 2012 R2 上的 IIS 8.5 - Windows Server 2016 上的 IIS 10.0 |
产品 | - 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 |
Header | Httpserv.h |
另请参阅
IHttpUrlInfo 接口
IHttpApplication::GetModuleContextContainer 方法
IHttpConnection::GetModuleContextContainer 方法
IHttpContext::GetModuleContextContainer 方法
IHttpFileInfo::GetModuleContextContainer 方法
IHttpFileMonitor::GetModuleContextContainer 方法
IHttpSite::GetModuleContextContainer 方法
IMetadataInfo::GetModuleContextContainer 方法