如何在使用反射加载的程序集中使用 Castle.Windsor

2023-12-02

假设我有一个库 Lib.dll,它使用 Castle.Windsor 来初始化其服务。

我有一个主应用程序 App.exe,它使用反射在运行时加载 Lib.dll。 App.exe 事先并不知道 Lib.dll 的位置,只有在运行时才知道。

在这种情况下,当App.exe加载Lib.dll并且Lib.dll初始化其服务时,会抛出System.TypeInitializationException异常,因为Castle.Windsor找不到服务类型。

Castle.MicroKernel.SubSystems.Conversion.ConverterException: Could not convert from 'Lib.TheServiceClass' to System.Type - Maybe type could not be found
   at Castle.MicroKernel.SubSystems.Conversion.TypeNameConverter.PerformConversion(String value, Type targetType) in e:\OSS.Code\Castle.Windsor\src\Castle.Windsor\MicroKernel\SubSystems\Conversion\TypeNameConverter.cs:line 91
   at Castle.MicroKernel.SubSystems.Conversion.DefaultConversionManager.PerformConversion(String value, Type targetType) in e:\OSS.Code\Castle.Windsor\src\Castle.Windsor\MicroKernel\SubSystems\Conversion\DefaultConversionManager.cs:line 134
   at Castle.MicroKernel.SubSystems.Conversion.DefaultConversionManager.PerformConversion[TTarget](String value) in e:\OSS.Code\Castle.Windsor\src\Castle.Windsor\MicroKernel\SubSystems\Conversion\DefaultConversionManager.cs:line 162
   at Castle.Windsor.Installer.DefaultComponentInstaller.SetUpComponents(IConfiguration[] configurations, IWindsorContainer container, IConversionManager converter) in e:\OSS.Code\Castle.Windsor\src\Castle.Windsor\Windsor\Installer\DefaultComponentInstaller.cs:line 196
   at Castle.Windsor.Installer.DefaultComponentInstaller.SetUp(IWindsorContainer container, IConfigurationStore store) in e:\OSS.Code\Castle.Windsor\src\Castle.Windsor\Windsor\Installer\DefaultComponentInstaller.cs:line 52
   at Castle.Windsor.WindsorContainer.Install(IWindsorInstaller[] installers, DefaultComponentInstaller scope) in e:\OSS.Code\Castle.Windsor\src\Castle.Windsor\Windsor\WindsorContainer.cs:line 327
   at Castle.Windsor.WindsorContainer.Install(IWindsorInstaller[] installers) in e:\OSS.Code\Castle.Windsor\src\Castle.Windsor\Windsor\WindsorContainer.cs:line 674

显然 Castle 找不到我的服务类,因为它位于 Lib.dll 中,而不位于 App.exe 的目录中。当我将 Lib.dll 复制到 App.exe 目录时,问题就消失了,但必须复制它并不是我们想要的。

那么我在 Lib.dll 中的代码如何告诉 Castle.Windsor 将类加载到正确的位置呢? (在 Lib.dll 位置而不是在 App.exe 位置)


您可以尝试通过以下方式加载代码中未解析的程序集装配解决 event

AppDomain.CurrentDomain.AssemblyResolve += (sender, args) =>
{
     string typeToLoad = args.Name;
     string myPath = new FileInfo(Assembly.GetExecutingAssembly().Location).DirectoryName;
     return Assembly.LoadFile(...); //or return Assembly.GetExecutingAssembly() etc.
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在使用反射加载的程序集中使用 Castle.Windsor 的相关文章

随机推荐

  • 为类型别名元组添加 Impl (f64, f64)

    我有一个自定义类型 Point type Point f64 f64 我想添加两个Point在一起 但我收到此错误 error E0368 binary assignment operation cannot be applied to t
  • 后续:从 lme4 中的 VarCorr 对象中提取名称并将其粘贴为列名称

    我正在跟进这个很好的答案 功能foo下面 取Name的列VarCorr fit 输出并使它们成为列名summary rePCA fit call 当我们输入时效果很好fm1 fm2 但我想知道为什么它失败了fm3 有解决办法吗 librar
  • 我有 recyclerview 和 searchview 如何发送有关我搜索的项目的详细信息数据

    我有带有 searchview 的 recyclerview 并且在 recyclerview 中选择项目时发送详细数据 问题是当我搜索项目并选择它时 详细信息数据不会更改总是出现第一个项目的详细信息数据 我如何发送有关我搜索的项目的详细数
  • 如何使实体只读?

    使用 JPA 使实体只读的正确方法是什么 我希望我的数据库表永远不会以编程方式修改 我想我明白我应该用以下方式锁定我的对象LockModeType READ 是否可以使用注释使我的实体在从数据库检索后直接锁定 或者我是否必须为该特定实体搞乱
  • 在查询结束之前开始查看查询结果

    假设我查询一个包含 500K 行的表 我想开始查看获取缓冲区中保存结果集的任何行 即使查询尚未完成 我想滚动浏览提取缓冲区 如果我滚动得太远 我想显示一条消息 例如 到达获取缓冲区的最后一行 查询尚未完成 当查询继续构建结果集时 可以使用
  • 类定义如何才能不占用内存呢?

    所以我读过this关于类定义是否占用内存以及this关于if函数占用内存 这是我不明白的 如果函数占用内存 或者它们的代码占用内存 类定义为什么不占用内存 我的意思是 类定义也是代码 所以它不应该像函数代码一样占用内存吗 说类定义不占用内存
  • 在R中打印unicode字符串

    我输入了一个文本字符串 csvfile 其中包含 unicode 符号 如下所示 U00B5克 分升 在 csv文件以及在 R 数据帧中读取 test read csv test csv U00B5将产生微符号 R 按原样将其读入数据文件
  • 使用多个线程多次调用一个方法

    我想要一个 LED 闪烁 同时我的 Raspberry 上正在做一些工作 我在 Python 脚本中使用 LED 线程 初始代码 import RPi GPIO import time import threading pinLED 10
  • ModelState 对于可为 null 的属性无效

    我有一个模型 其中属性 CompanyID 允许空值 public partial class ReportTemplateItem Key public int ReportTemplateItemID get set Required
  • 如果 Google 表格中的单元格发生更改,则触发电子邮件

    我有一张表 我们可以在 Google 表格中跟踪部门指标 当指标发生变化时 我试图将其发送到电子邮件 我正在使用 counta 在范围 P2 中 来监视是否有新指标进入 并且我想在范围内的值发生变化时触发电子邮件 function onEd
  • 如何移动嵌套数组中的元素

    我想移动嵌套数组中的元素 所以 这是我的数据 let products product name A id 5ace995c14a759325776aab1 transactions id 5ad3a274ac827c165a510f99
  • 信息索引(emacs 内和外)

    信息是否提供任何设施来链接foo info文件到信息的主索引 上下文是这样的 我想避免维护我自己的索引 信息页面foo info is in abc def foo info 这个想法是能够打字info foo并开始阅读该页面 或者在 em
  • 如何检查 jQuery 插件是否已加载?

    有什么方法可以检查特定插件是否可用 想象一下 您正在开发一个插件 该插件依赖于另一个正在加载的插件 例如 我希望 jQuery 验证插件使用 dateJS 库来检查给定日期是否有效 在 jQuery Valdation 插件中检测 date
  • 无法连接到 WiFi 网络

    我是 Android 开发新手 正在尝试使用 Android SDK 连接到 WiFi 网络 断开连接的代码工作正常 但重新连接失败 这是我的代码 try WifiConfiguration conf new WifiConfigurati
  • Groovy 更新导致 PermGen 中大量死亡 GroovyClassLoader

    我有一个 Java 7 项目 每 n 分钟由 n 个进程运行一次脚本 以下是运行脚本的代码示例 ScheduledFuture scheduledFuture scheduledService scheduleAtFixedRate new
  • 如何通过 websocket 发送 pygame 图像?

    我目前正在尝试编写一些代码 让网站可以查看我的网络摄像头 我大致按照链接的教程进行操作这个网站 除了使用 Python 和 pygame 而不是Processing 目前 我的代码正在抓取一个 pygame 图像 最初是一个 SimpleC
  • React:渲染函数中的条件语句

    我有一系列不同艺术家创作的物品 我想根据图像是否在单个对象中显示不同的内容 我试过放一个if else在我的渲染方法中声明 但这当然不起作用 请参阅下面我的代码 render function var cardList this props
  • 并行运行 shell 函数的多个实例[重复]

    这个问题在这里已经有答案了 我有一个 shell 脚本 如下所示 bin bash myfunc do something call a rest service sleep 300 status get status of the ope
  • 从桌面应用程序终止 WinCE 设备进程

    我正在将文件从桌面复制到 WinCE 设备 通过RAPI API 如果WinCE主程序正在运行 我需要杀死它 更新并再次重新启动它 到目前为止 我设法复制文件并启动主程序 没有任何问题 但我找不到通过 RAPI 终止进程的方法 有 CeCr
  • 如何在使用反射加载的程序集中使用 Castle.Windsor

    假设我有一个库 Lib dll 它使用 Castle Windsor 来初始化其服务 我有一个主应用程序 App exe 它使用反射在运行时加载 Lib dll App exe 事先并不知道 Lib dll 的位置 只有在运行时才知道 在这