如何将类注入到 C# dll 中

问题描述 投票:0回答:1

我有一个包含一堆类和方法的 dll,它是可执行文件的一部分。

该dll将包含以下内容

public class MyDep: IMyDep 
{
  public void aMethod() {return;}
}
public class MyClass : IMyClass
{
  public IMyDep Dep = new MyDep();
}

现在,从另一个解决方案中,我将运行 MyApp.exe,它将加载 dll 作为其依赖项之一。

在运行它之前,我想定义一个模拟

MyDep
类并将其注入到原始 dll 中。 理想情况下,我想完全用 C# 编写此过程并使其自动化。

实现这一目标的最佳方法是什么?

c# .net dll .net-8.0 dll-injection
1个回答
0
投票
更新

我决定使用编译器符号,而不是创建一个新的解决方案,至少我不会在项目中拥有太多解决方案。

我将

MyDep
更改为

public class MyDep: IMyDep 
{
#if APPIUM
  public void aMethod() {
   runMockCode();
   return;
  }

#else
  public void aMethod() {
   runProductionCode();
   return;
  }

#endif
}

我将使用

donet build -p:APPIUM=true
编译它以进行 APPIUM 测试

看起来唯一简单的解决方案是将

MyDep
隔离到一个单独的项目中并将其添加为主项目的引用,这样它将编译为独立的 dll,其中只包含我需要模拟的内容。

然后我创建另一个项目,它是我想要模拟的项目的副本,并修改了我需要模拟的方法。

注意。输出 dll 必须使用与原始 dll 相同的名称进行编译。 在 VS -> 项目属性 -> 应用程序 -> 程序集名称

我需要这个来模拟一些使用 appium 与硬件通信进行 UI 测试的代码。

在启动 appium 之前,我将项目编译到测试文件夹中,然后用模拟 dll 替换 dll。

© www.soinside.com 2019 - 2024. All rights reserved.