アプリケーションを管理するためのツールを開発しようとしています。ツールは、具体的なアプリから特定の情報を知る必要があります。これらのアプリケーションによって参照されるすべてのアセンブリを参照せずに、そのデータを取得したいと考えています。
これは私が持っているコードです:
MetadataLoader.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) にロードしたいと考えています。