【问题标题】:Accessing a Class that is NOT declared in App_Code in ASP.NET访问在 ASP.NET 的 App_Code 中未声明的类
【发布时间】:2009-01-03 14:04:31
【问题描述】:

我有时会定义业务逻辑类来“帮助”我的 ASPX 代码隐藏类。对我来说,将它们都包含在代码隐藏文件中是最有意义的,因为它们可以一起工作。但是,我偶尔想从 App_Code 中定义的更高级别的类中访问业务逻辑类,但它们不能在文件之外自动访问。

因此,问题是:访问 App_Code 中定义的类很容易,但我如何访问其他地方定义的类?

更新:另一件事,ASPX 页面类和 App_Code 类在同一个命名空间中 - 这不是问题。

注意:我已经听取了那些做出回应的人的建议(谢谢大家),并且正在重构以使课堂访问更容易。但是,我认为这个问题实际上还没有得到回答(在 ASP.NET 网站项目的情况下)。我不再需要答案了,但是,如果有人能澄清是什么让类在 App_Code 之外可见时,它可能会帮助其他人(甚至我,在路上)。

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    确保将类放在合理的命名空间中。

    在您想要访问它们的文件后面的代码中放置“使用”关键字。

    或者

    将包含您的类的 dll 放在 /bin 文件夹中。

    TBH 我更喜欢将单独的库项目保留在同一个解决方案中,并在 Web probject 中有项目引用。 VS 为您处理构建和放置 dll。

    【讨论】:

    • 谢谢安东尼。我不需要 using 关键字(或导入),因为这些类在同一个命名空间和项目中)。我认为您对单独的库项目可能是正确的——尤其是对于我的 DAL。如果我的业务逻辑在一个单独的项目中,它也会使 nUnit 测试更容易......
    【解决方案2】:

    当您创建或添加任何文件时,它已被创建为内容文件,而它必须是编译文件。

    请按照流程解决此问题。

    1) 右键单击​​ App_Code 文件夹中的类文件。 2) 点击属性。 3) 将 Build Action 从 "" 更改为 Compile 4) 重建您的应用程序。

    这肯定行得通

    图沙尔·泰吉

    【讨论】:

    • 对于任何发现此问题的人来说仅供参考 - 您可以在执行此操作后从您的网页代码中获取类,并将 Build Action 设置为 Compile 是这样做的正确方法,但事实并非如此一颗神奇的子弹。当我将项目的目标框架从 .NET 4.5.2 移动到 4.0 时遇到了一个问题,我有 App_Code 类调用其他 App_Code 类中的方法,并且在我降级后它不能再这样做了。我不得不用我命名为“AppCode”的标准文件夹替换 App_Code,并将我的类移动到该文件夹​​中,以使其再次工作。
    【解决方案3】:

    我假设您的意思是在代码隐藏 .cs 文件中定义一个单独的类?你给他们什么访问修饰符?

    尽管如此,我通常会在解决方案中为此类事情创建一个单独的项目(通常在不同的命名空间中,如 MyApp.Web 和 MyApp。),然后从那里引用它。

    【讨论】:

    • 是的 - 它是代码隐藏 .cs 文件中的一个单独的类。他们都是公开的。这些“帮助”类提供特定于页面的业务逻辑,但我有点不愿意将它们全部放在一个单独的项目中,因为它们非常密切地处理相应页面的需求。
    【解决方案4】:

    你也可以在你的项目中创建一个标准文件夹来访问类,然后将它们移到那里,但是你必须做一些额外的事情来让你的项目可以访问它:

    • 如果您遇到“App_Code”文件夹的问题,请确保不要将文件夹命名为任何保留术语(即称其为“AppCode”,而不是“App_Code”)子弹。
    • 所有类都应与您的代码隐藏具有相同的命名空间。
    • 如果类是从其他类调用的,请确保使用公共方法将类公开。
    • 包括“使用 MyClass;”代码隐藏/类文件顶部的语句。
    • 确保类的 Build Action 属性设置为 Compile。

    【讨论】:

      【解决方案5】:

      由于 .net dsnt 支持多重继承,因此您无法从同一代码隐藏文件中的另一个类访问一个类。但是您可以在主类中创建业务逻辑类作为内部类,并将其所有功能公开,以便可以在主类中调用它们。

      【讨论】:

      • 我认为您不太了解问题的要点。我并没有尝试进行多重继承。首先,您可以在一个代码中拥有多个类,并且一个可以调用另一个类。看来您只是无法从另一个代码隐藏中访问一个代码隐藏中的类。老实说,我什至不这样做......我只是好奇这是否是语言的硬编码约束。在这一点上,无论如何我在业务逻辑层中定义了大多数类,并且那里不存在这样的约束。但是感谢您的尝试!
      • 据我了解,这个答案完全是错误的。假设您的项目中有一个类文件,它有一个命名空间(匹配代码隐藏),然后是其中的 2 个类。只要这些类中的方法是公开的,一个类就可以在另一个类中调用这些方法,或者从代码隐藏中调用。似乎第一句话是说你不能这样做,第二句话说你可以,但你必须在你的主要课程中让它成为一个“内部”类,你 1)不需要这样做,& 2)无论如何都不应该这样做。每个类都应该是独立的——而不是在另一个类中。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-16
      • 1970-01-01
      • 1970-01-01
      • 2011-05-12
      • 2011-04-03
      • 1970-01-01
      相关资源
      最近更新 更多