【问题标题】:using abstract classes from another assembly in .NET在 .NET 中使用来自另一个程序集的抽象类
【发布时间】:2011-08-11 20:59:14
【问题描述】:

假设我有 3 个项目: 1 项目是 .NET MVC3 中的 Web 项目 1 项目是应用程序的业务逻辑。从 Web 项目中引用它的位置。 1 个外部项目 (MyTools),具有一些通用功能,如 log4Net、nHibernate 实现。

我的目标是在业务逻辑的 MyTools 项目中实现一个特定的抽象类。

public class Client : IEntity //Project Location: Buisness Logic Project
{
    public int Id { get; set; }
    public string Name { get; set; }
}

public class ClientAO : BaseDAO<Client> //Project Location: Buisness Logic Project
{

}

public interface IEntity //Project Location: MyTools Logic Project
{
    int Id { get; set; }
}

public abstract class BaseDAO<TEntity> where TEntity : IEntity, new() //Project      Location: MyTools Logic Project
{
    public static TEntity GetEntityById(int Id)
    {
        //Logic here to get object with ID = id
    }
}

问题出在这里:当我尝试使用 ClientAO 类时,Web 项目中没有 GetEntityById 方法,尽管它正在被引用。然后,如果我将 MyTools 项目中的所有逻辑都移到业务逻辑中而不进行任何更改,则 GetEntityById 将可用。我无法理解这个问题发生了什么。访问修饰符有什么问题吗?据我所知,将一个类设置为 public,甚至可以从不同的程序集访问该类。

谢谢

【问题讨论】:

  • 我只是把这段代码放在不同的项目中,并且可以从ClientAO类访问GetEntityById()。您的两个项目是否都针对相同版本的 .NET 框架?您是否遇到构建错误或运行时异常?
  • 您是否为业务逻辑项目添加了正确的引用?
  • 这很奇怪 - 逻辑上它应该可以工作 - 不知道该怎么做。
  • 如果您创建 2 个新项目并将上面的代码复制/粘贴到各自的项目中,它会构建吗?它应该,这意味着您的问题可能不在于您发布的代码。
  • 问题已解决。 m4tt1mus 所说的我的错误 - 参考问题 - 这就是导致问题的原因。

标签: c# .net asp.net-mvc oop design-patterns


【解决方案1】:

如果将正确的引用添加到您的业务逻辑项目中,这应该可以工作。

【讨论】:

    【解决方案2】:

    GetEntityById 是一个静态方法。也许您是第一次尝试使用 ClientDAO 实例的该方法,而第二次尝试使用该类?

    无论如何,为什么那个方法是静态的?

    【讨论】:

    • 我正在尝试这样使用它:ClientAO.GetEntityById(5);但是当抽象类位于不同的项目中时,GetEntityById 不可用。
    • BaseDAO.GetEntityById(5) 有效吗?从派生类调用静态是没有意义的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-04
    • 2018-06-28
    • 1970-01-01
    • 2011-09-11
    • 1970-01-01
    • 2012-09-29
    • 2016-09-06
    相关资源
    最近更新 更多