【问题标题】:C# - Create a new instance of a host-class within a dll-projectC# - 在 dll 项目中创建主机类的新实例
【发布时间】:2017-07-20 12:05:27
【问题描述】:

我有一个带有“Apple”类的主应用程序和一个单独的 dll 项目,我想在其中创建一个新的“Apple”实例。两个项目(MainApplication 和 Dll-Project)都是独立的项目,但都在同一个解决方案中。背景是我想将一些类(在本例中为“DllClass”类)作为 dll。

主应用程序:

 using AppLib;

 namespace SpaceOne
 {
    public class Main
    {
    }

    public class Apple
    {
       public Apple(DllClass someThing)
       {
          // Do some constructor stuff
       }
    }
 }

DLL 项目:“AppLib”

using MainApplication;

namespace SpaceTwo
{  
   public class DllClass
   {
      Apple foo = new Apple(this); // <= Here occurs the fault
   }
}

为什么会显示这个错误信息:

SpaceOne.Apple.Apple(DllClass)的最佳重载方法匹配 有一些无效的参数

如果我将 DllClass 复制到我的 MainApplication 并在那里尝试它就可以了。但我无法从我的 DLL 项目中创建新的 Apple 实例,尽管我已将 MainApplication 作为参考并通过“使用 MainApplication”导入。

如何从我的 DLL 项目创建新的 Apple 实例?


更新:这只是一个无法编译的代码示例,应该只是显示我的代码的粗略结构。

【问题讨论】:

  • 该错误与您显示的代码不匹配。此外,您的代码(除了您提到的那一行)根本无法编译。请提供minimal reproducible example
  • 为什么你的类声明有()这是造成问题的原因
  • 要访问主项目的类,您的 dll 项目必须引用该主项目。但这当然似乎是错误的方向。通常,您的主项目会引用 dll 以使用 dll 提供的类。但就目前而言,您的代码还有其他问题:类声明中的() 以及在static 上下文中使用this(字段初始化)
  • 在低级类库中实例化高级模块中定义的类的原因是什么?您应该将Apple 类移动到单独的类库项目,然后在AppLib 中引用它。这种方法更可取 IMO。
  • 我不知道这个例子会如何工作。在我看来,你有一个循环依赖。这将如何编译?

标签: c# .net dll


【解决方案1】:

如何从我的 DLL 项目创建新的 Apple 实例?

您不能,Apple 在您的主应用程序中使用 DLL 项目中的一个类 - DllClass。因此,要编译 Main Application,必须引用 DLL-Project。

DLL 项目正在主应用程序中使用 Apple。所以 DLL-Project 必须有对 Main Application 的引用。

但这不会编译,你有一个循环依赖。要编译主应用程序,您需要一个已编译的 DLL 项目,但要编译 DLL 项目,您需要一个已编译的主应用程序,但在您有一个已编译的 DLL 项目之前,您无法编译主应用程序.....因此循环依赖。

为什么不将 Apple 移入 DLL 项目?

【讨论】:

  • 谢谢,这是有道理的。问题是 Apple 有一些其他依赖项,所以我不得不将所有依赖类也移动到 DLL-Project 中。其中一个类会在初始化时创建一个新窗口,这会导致其他问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-17
  • 2022-12-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多