ライブラリに次のコードがあります。
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); } } }
他に何ができますか?