私は、特定のインターフェイスを実装するさまざまなオブジェクトを持っています。 私のコードの1つの場所で、私はインターフェイスのすべてのエクスポートを取得し、実際のクラス名をDBに保存します。いくつかの素早く汚れた疑似があります:クラス名を実装してエクスポートされたインターフェイスを取得する
これはうまく動作し、私は簡単にすべての実装を得ることができます。 しかし、後で特定のクラス名の新しいインスタンスを取得する必要もあります。
私が_container.GetExportedValues<ISomething>
を試すと、Something
とSomethingElse
の両方が得られます。私が試してみたら_container.GetExportedValue<ISomething>("SomethingElse")
私は、制約に合ったエクスポートを見つけることができないという構成エラーが出ます。
したがって、クラスの名前のみを知って、SomethingElse
の新しいインスタンスを取得するにはどうすればよいですか?
[Export(typeof(SomethingElse))]
[PartCreationPolicy(CreationPolicy.NonShared)]
public class SomethingElse : ISomething { }
その後
_container.GetExportedValue<SomethingElse>
作品:
ああ、必要な契約名を '[Export]'属性に入れることができます...賢い。契約名に完全修飾クラス名を自動的に入れる方法はありますか?コードでは 'typeof(Something).FullName'を実行できますが、属性にはできません。 – GTHvidsten
@GTHvidsten、AFAIK、それを行う方法はありません。 – dymanoid