我目前正在为项目开发数据采集器。它的工作方式是它基本上调用另一个收集数据的程序,该程序返回一个包含队列信息集合的数据结构。然后收割机将数据序列化。实际收集数据的程序由另一个团队维护,最近他们进行了升级并决定重组他们的代码。我调用的方法仍然在同一个位置,但是,我得到的数据结构被移动到另一个程序集(它的代码保持不变)。有趣的是,我们现在在该领域拥有该产品的两个版本,因此根据客户端的版本,我需要的数据结构可能位于两个不同的程序集之一。如果可能的话,我的老板想要尝试只有一个版本的收割机程序。
所以,我的问题是:使用C#和.NET 3.5,有没有办法选择在运行时使用哪个程序集?我想我可以使用反射,但我想知道是否有任何方法可以在编译时正常编写代码,然后根据其他程序的版本在运行时解析依赖项。
答案 0 :(得分:0)
你应该去AppDomain
http://www.codeproject.com/KB/cs/Assemblies___Appdomains.aspx
答案 1 :(得分:0)
您可能想要调查assemblybinding标记。
答案 2 :(得分:0)
您可以尝试使用Adapter(包装器)设计模式。
interface IQueueInfoProvider
{
DataStructure FetchData();
}
class Version1QueueInfoProvider : IQueInfoProvider
{
DataStructure FetchData()
{
//Fetch using Version1 Assemblies.
}
}
class Version2QueueInfoProvider : IQueInfoProvider
{
DataStructure FetchData()
{
//Fetch using Version2 Assemblies.
}
}
我相信如果不需要.NET,.NET不会尝试加载引用的程序集,但如果我错了,你总是可以使用反射。