在ASP.NET中的可选第三方DLL中调用方法

时间:2011-01-17 09:34:43

标签: asp.net dll

我正在开发一个附加组件,需要与其他类似的附加组件一起使用。有一个第三方组件决定实现与默认功能略有不同的功能。

我要做的是调用只有第三方组件的方法的重载,如下所示:

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是否存在都可以安全运行?

2 个答案:

答案 0 :(得分:1)

你需要对此进行控制反转。

检查Castle Windsor或Microsoft Unity项目。

这些将为您提供一种通过配置切换相同基本类型的实现的方法。

http://www.castleproject.org/container/

http://unity.codeplex.com/

答案 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,没有任何异常或编译错误。