【问题标题】:Referencing a class that may exist in one of two assemblies引用可能存在于两个程序集中之一中的类
【发布时间】:2010-07-07 16:15:15
【问题描述】:

我目前正在为一个项目开发数据收集器。它的工作方式基本上是调用另一个收集数据的程序,该程序返回一个包含队列信息集合的数据结构。然后,harvester 将数据序列化。实际收集数据的程序由另一个团队维护,最近他们进行了升级并决定重组他们的代码。我调用的方法仍然在同一个位置,但是,我返回的数据结构被移动到了不同的程序集(它的代码保持不变)。有趣的是,我们现在在现场拥有该产品的两个版本,因此根据客户拥有的版本,我需要的数据结构可能位于两个不同的程序集中之一。如果可能,我的老板想尝试只使用一个版本的收割机程序。

所以,我的问题是:使用 C# 和 .NET 3.5,有没有办法选择在运行时使用哪个程序集?我想我可以使用反射,但我想知道是否有任何方法可以在编译时正常编写代码,然后根据其他程序的版本在运行时解决依赖关系。

【问题讨论】:

    标签: c# assemblies reference


    【解决方案1】:

    您可以尝试使用适配器(包装器)设计模式。

    interface IQueueInfoProvider
    {
       DataStructure FetchData();
    }
    
    class Version1QueueInfoProvider : IQueInfoProvider
    {
       DataStructure FetchData()
       {
          //Fetch using Version1 Assemblies.
       }
    }
    
    class Version2QueueInfoProvider : IQueInfoProvider
    {
       DataStructure FetchData()
       {
           //Fetch using Version2 Assemblies.
       }
    }
    

    我相信 .NET 不会尝试加载不需要的引用程序集,但如果我错了,您始终可以使用反射。

    【讨论】:

      【解决方案2】:

      您可能需要调查程序集绑定标签。

      http://msdn.microsoft.com/en-us/library/twy1dw1e.aspx

      【讨论】:

        【解决方案3】:

        你应该去 AppDomain

        http://www.codeproject.com/KB/cs/Assemblies___Appdomains.aspx

        还有一个最受欢迎 http://www.west-wind.com/Weblog/posts/601200.aspx

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-06-05
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多