2

ライブラリに次のコードがあります。

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); } }
    }
    

他に何ができますか?

4

0 に答える 0