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 的指针。

示例

下面的代码示例演示了实现 接口的名为 的MyContainerIDispensedHttpModuleContextContainer自定义类,以及实现 接口的IHttpUrlInfo名为 的MyClass自定义类。 MyClassMyContainer 指针的 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 方法