ライブラリに次のコードがあります。
public interface IFirst { }
public interface ISecond { }
public class Second : ISecond
{
public Second(IFirst injectedFirstService)
{
}
}
ここで、依存性注入で構築されISecond
た のインスタンスを使用してインターフェイスを他のパーツに提供する必要があることを MEF コンテナーで指定したいと思います。Second
また、ライブラリ クラス内に属性を配置することを強制しない (つまり、クラス内に配置しない) 方法でそれを行いたいと考えていImportingConstructor
ますSecond
。
私は次の解決策を知っています:
- second のサブクラス、または適切な MEF 属性を持つ
Second
同じインターフェイスを装飾するが実装するクラスを使用します。ISecond
これらのタイプは、構成カタログで公開できます。 基本的に、コンストラクターのインポートとインスタンスのエクスポートをプロパティのインポートとエクスポートとして変換する MEF 属性付きの部分を次のように記述し、
CompositionBatch
インスタンスに配置します。public class SecondExporter { [Import] IFirst First { get; set; } [Export] ISecond Second { get { return new Second(First); } } }
他に何ができますか?