我正在寻找正确的程序集设置和抽象来解决这个问题:
我使用程序集访问外部系统。现在这个程序集在每台计算机上都不可用,因为它必须在我的应用程序之前安装(它带有完整的外部系统设置)。
当我现在在没有安装此外部系统的计算机上启动我的应用程序时,我得到:“FileNotFoundException”(我有一个Application.ThreadException
处理程序)
我想“只是”引用该程序集并且能够在没有它的情况下运行(提供配置,建议,模拟)。
我想我必须实现一个包装器,但我不知道从哪里开始。包装器是否会引用实际组件或使用反射在可用时调用它?
答案 0 :(得分:1)
我想你已经回答了你的问题。实现它的最佳方法是实现一个“包装器”,它可以从该程序集中获取对象并利用该程序集的具体对象,然后实现一个存根,该存根将在未找到该程序集时接管。
如果你实现Proxy Pattern,这个包装器可以是一个代理对象,并且当找不到上面提到的程序集时,它应该能够有一些智能逻辑来切换到不同的具体对象。由于您使用的是c#.net,它应该像检查程序集是否存在于特定位置一样简单,而不会在try / catch块中捕获检查逻辑。
顺便说一句,包装器无法引用程序集,因为程序集未包含在项目中...您手动加载不同的程序集。然后,为了实例化此程序集的对象并调用这些对象的方法,您需要使用反射。
答案 1 :(得分:1)
您可以处理AppDomain.AssemblyResolve事件。当无法找到程序集时调用它,它为您的代码提供了跟踪指定程序集并将其返回到应用程序域的机会。