我正在尝试开发用于管理我的应用程序的工具。工具需要从具体的应用程序中了解某些信息。我想在不引用这些应用程序引用的所有程序集的情况下检索该数据。
这是我的代码:
元数据加载器.dll:
public class MetadataLoader
{
public MetadataLoader(MetadataSource source)
{
...
}
public Metadata Metadata { get; set; }
}
public class MetadataSource
{
public void Load(string path)
{
...
}
}
元数据.dll:
public class Metadata
{
...
}
工具.dll:
public class Worker
{
public void Execute()
{
// create new domain
// create metadataloader instance
// - create metadatasource instance and call Load. Path should be passed from this method.
// - create MetadataLoader instance
// - fetch MetadataLoader.Metadata
// >>> Tool.dll should reference only Metadata.dll, not MetadataLoader.dll
}
}
此外,我无法更改 MetadataSource 类,因为它在第三方库中(这是简化的示例)。如何实现 Execute 方法?
更新: MetadataLoader.dll 和 Tool.dll 引用同一程序集的不同版本(最初问题中提到的第三方库),因此 Tool.dll 不得引用 MetadataLoader.dll 使用的版本。
Tool.dll 参考: - ThirdParty.v2.dll - Metadata.dll
MetadataLoader.dll 参考: - ThirdParty.v1.dll - Metadata.dll
给这个问题更多的背景。Tool.dll 和 MetadataLoader.dll 都使用相同的 ORM 来访问数据库。ORM 还提供对象模型元数据。Tool.dll 使用 ORM 来访问自己的数据库,但也需要访问被管理应用程序的对象模型。Tool.dll 不得依赖于管理应用程序使用的 ORM 版本。这就是为什么我想将受管理的应用程序加载到它自己的“容器”(AppDomain)中。