我有一个应用程序,它具有两个不同的组件实现。
如果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
,因为它似乎引起了更多混乱。设计插件系统并不是真的。实际上,首选对象和旧对象是复杂的类型,它们的工作原理相似,但首选对象的工作效果更好。我实际上不允许加载任意插件。