我正在开发一个附加组件,需要与其他类似的附加组件一起使用。有一个第三方组件决定实现与默认功能略有不同的功能。
我要做的是调用只有第三方组件的方法的重载,如下所示:
Select Case True
Case TypeOf provider Is 3rdParty.Provider
result = DirectCast(provider, 3rdParty.Provider).GetNames(method, True)
Case Else
result = provider.GetNames(method)
End Select
不幸的是,包含3rdParty.Provider的DLL是可选的,因此如果不存在,此代码将给出编译错误。我怎样才能完成同样的事情,但是无论3rdParty.Provider.dll是否存在都可以安全运行?
答案 0 :(得分:1)
你需要对此进行控制反转。
检查Castle Windsor或Microsoft Unity项目。
这些将为您提供一种通过配置切换相同基本类型的实现的方法。
答案 1 :(得分:0)
经过一些试验和错误,并通过几个MSDN文档和论坛帖子,我能够拼凑出以下解决方案:
Dim t As Type = Type.GetType("3rdParty.Provider, 3rdParty.Provider")
Select Case True
Case Object.ReferenceEquals(provider.GetType(), t)
result = Convert.ChangeType(provider, t).GetNames(method, True)
Case Else
result = provider.GetNames(method)
End Select
我测试了从我的项目中删除第三方DLL引用,这样可以毫无障碍地调用默认的GetNames,没有任何异常或编译错误。