【问题标题】:How do I consume Classes i have stored in Application?如何使用我存储在应用程序中的类?
【发布时间】:2016-07-05 17:13:27
【问题描述】:

我已经定义了一个这样的类:

Class Foo
    Public SomePublicProperty

    Public Function init(p_somePublicProperty)
        set init = Me

        SomePublicProperty= p_somePublicProperty
    End Function
End Class

然后在我的 global.asa Application_OnStart 中使用它:

Dim fooInstance 

Set fooInstance = New Foo.init("Some data")

fooArray = Array(fooInstance)

Application("fooArray") = fooArray

这很好,但是当我从另一个页面上的应用程序商店中取回值时,我无法在属性中获取...

fooArray = Application("fooArray")

fooArray(0).SomePublicProperty 'This line returns an error - Object doesn't support this property or method

我曾尝试将类定义放入第二页,但没有帮助。

我错过了什么?


我刚刚找到this 的问题。我是否正确假设相同的规则重新序列化同样适用于 Application 对象?所以我不应该尝试这样做吗?

【问题讨论】:

    标签: vbscript asp-classic


    【解决方案1】:

    很遗憾,您不能这样做,这是我能找到的最佳解释;

    来自Can I store VBScript class objects in a Session variable?
    这是因为 VBS 类不是真正的类。它们实际上只是内存中的信息集合,并且无法保证(例如)存储在一个页面中的实例甚至会接近匹配另一个页面中的类定义。 p>

    这与使用Server.CreateObject() COM 对象不同,后者可以从ApplicationSession 对象中存储和检索。

    你有几个选择;

    • 自己序列化对象,在结构化字符串中,然后在需要时使用它来反序列化对象。

    • 为您的 VBScript 类创建一个 COM 包装器,并完全停止使用 Class 语句。由于 COM 对象可以存储在 ApplicationSession 对象中,只要 COM 类是单线程的,这应该可以工作。

    • 将您的课程转换为 Array 并改用它。


    有用的链接

    【讨论】:

    • fooArray 是一个数组,所以没有Set
    • @Ekkehard.Horner 已修改答案。
    猜你喜欢
    • 1970-01-01
    • 2016-03-19
    • 2023-04-05
    • 1970-01-01
    • 2011-09-24
    • 2019-01-11
    • 1970-01-01
    • 2012-02-27
    • 1970-01-01
    相关资源
    最近更新 更多