如何处理可能不存在的dll依赖关系?

时间:2019-03-04 07:06:42

标签: c# .net

我有一个应用程序,它具有两个不同的组件实现。

如果dll存在,我只想加载首选的实现;如果不存在,那么我可以捕获实例化异常并选择后备实现。

这是一些伪代码:

internal static IThing CreateInstance()
{
     try
     {
          return new PreferredThing();
     }
     catch (Exception ex)
     {
          Log("Unable to load preferred thing. Falling back to old thing.");
          return new OldThing();
     }
}

我了解始终出于性能考虑而抛出异常是有争议的,并且由于所有异常处理程序都很糟糕,但是让我们假设这是可以接受的。

我的具体问题是,FileNotFoundException dll的PreferredThing甚至在到达CreateInstance方法的主体之前都会被抛出。似乎运行时正在尝试在调用PreferredThing时立即预加载CreateInstance dll。

有办法避免这种预紧吗?

更新:我从问题描述中删除了术语plugin,因为它似乎引起了更多混乱。设计插件系统并不是真的。实际上,首选对象和旧对象是复杂的类型,它们的工作原理相似,但首选对象的工作效果更好。我实际上不允许加载任意插件。

0 个答案:

没有答案